【问题标题】:Share View between ListView and ScrollView在 ListView 和 ScrollView 之间共享视图
【发布时间】: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


【解决方案1】:

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

您最好观看“the world of listView”讲座,了解如何处理此类情况。

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

【讨论】:

  • 你永远不应该将 listView 放在 scrollView 中(或相反) 是的,就像我的帖子中提到的那样。
  • 那我不确定是什么问题。如果您只想在视图之间切换,请使用 ViewSwitcher 。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-27
    • 1970-01-01
    • 1970-01-01
    • 2012-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-14
    相关资源
    最近更新 更多