【发布时间】:2014-03-22 18:43:45
【问题描述】:
我有以下布局:
当我点击 Btn 1 时,内容将是 ListView,点击 Btn 2,将显示 LinearLayout。我的问题是我希望整个事情滚动。因此,如果我的根是ScrollView,则使用 Btn 2 显示的内容很好,但正如我们所知,它不适用于 ListView。
因此,我的根布局包含 2 个布局:
<RelativeLayout id="root">
<include layout=listViewLayout />
<include layout=scrollViewLayout />
</RelativeLayout>
这个想法是有一个标题视图:
这样,当创建根视图时,我会膨胀标题,将其设置为ListView 的标题视图(工作正常),并将其添加到ScrollView。但只要我添加它(从技术上讲,它被添加到 ScrollView 内的 LinearLayout 中),然后我得到以下崩溃:
java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams
从技术上讲,我可以让两个标题做完全相同的事情(设置图片,将侦听器设置为按钮),但为了避免重复,还有哪些其他选择?
如果我将标题添加为一行(而不是使用listView.addHeaderView)并修改我的适配器以处理不同的布局,它会解决问题吗?
谢谢!
编辑:澄清一下,当我点击 Btn 1 或 2 时,我只是显示/隐藏布局。我不会动态修改 ViewGroup。它允许我显示ListView + 标头或ScrollView。第一次显示根目录时发生异常。但是如果我不尝试在ScrollView 中添加标题视图,那么它以编程方式工作正常。
编辑 2:在 2 个 ListViews 之间共享 1 个标头 (View) 也不起作用。从 UI 的角度来看,它看起来不错,但交互却不是(一些按钮停止响应点击)。
另外,我不能只有 1 个ListView,因为内容是从网络上提取的,这意味着每次在视图之间切换时我都必须存储/恢复所有内容。
【问题讨论】:
-
你也可以添加一些代码。
-
如果我正确理解了异常,您正在动态删除顶部 ViewGroup 并尝试将其设置为 ListView 标头?
-
还有哪些其他选择? - 使用
ListView作为根并模拟具有不同行类型的不同布局(以及将ImageView声明为ListView的标头(我假设您想使用列表本身滚动)。
标签: android android-listview android-view android-scrollview