在ListView和ScrollView之间共享视图

时间:2014-03-22 18:43:45

标签: android android-listview android-view android-scrollview

我有以下布局:

layout

当我点击Btn 1时,内容将为ListView,点击Btn 2会显示LinearLayout。我的问题是我希望整个事情滚动。因此,如果我的根是ScrollView,则使用Btn 2显示的内容很好,但据我们所知,它不适用于ListView

相反,我的根布局包括2个布局:

<RelativeLayout id="root">
    <include layout=listViewLayout />
    <include layout=scrollViewLayout />
</RelativeLayout>

这个想法是有一个标题视图:

header

这样当创建根视图时,我会对标题进行膨胀,设置为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,因为内容是从网络中提取的,这意味着每次在视图之间切换时我都必须存储/恢复所有内容。

2 个答案:

答案 0 :(得分:0)

你永远不应该将listView放在scrollView(或相反的)中。

您最好观看讲座&#34; the world of listView&#34;了解如何处理此类案件。

处理它的一种方法是为listView设置一个标题,或者为你想要创建的每个特殊行创建一个新的viewType。

答案 1 :(得分:0)

事实证明,实现此目的的唯一方法是复制标题(创建相同View的2个实例)...