我有以下布局:
当我点击Btn 1时,内容将为ListView
,点击Btn 2会显示LinearLayout
。我的问题是我希望整个事情滚动。因此,如果我的根是ScrollView
,则使用Btn 2显示的内容很好,但据我们所知,它不适用于ListView
。
相反,我的根布局包括2个布局:
<RelativeLayout id="root">
<include layout=listViewLayout />
<include layout=scrollViewLayout />
</RelativeLayout>
这个想法是有一个标题视图:
这样当创建根视图时,我会对标题进行膨胀,设置为ListView
的标题视图(正常工作),然后将其添加到ScrollView
。但是一旦我添加它(技术上,它被添加到LinearLayout
内的ScrollView
),然后我得到以下崩溃:
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:在View
中共享1个标头(ListViews
)也不起作用。从UI的角度来看,它看起来没问题,但交互不是(某些按钮停止响应点击)。
此外,我不能只有1 ListView
,因为内容是从网络中提取的,这意味着每次在视图之间切换时我都必须存储/恢复所有内容。
答案 0 :(得分:0)
你永远不应该将listView放在scrollView(或相反的)中。
您最好观看讲座&#34; the world of listView&#34;了解如何处理此类案件。
处理它的一种方法是为listView设置一个标题,或者为你想要创建的每个特殊行创建一个新的viewType。
答案 1 :(得分:0)
事实证明,实现此目的的唯一方法是复制标题(创建相同View
的2个实例)...