【问题标题】:How do I create a ListView that's not in a ScrollView, or has the ScrollView disabled?如何创建不在 ScrollView 中或禁用 ScrollView 的 ListView?
【发布时间】:2010-03-10 17:52:47
【问题描述】:

我想要 ListView 中的一些好东西,比如能够使用 ListAdapter 和项目选择等,但我不想要它的 ScrollView 部分。我想以不同的方式自己实现这部分(为什么或如何这样做并不是这个问题的重点,所以请不要问“为什么”)。

有没有办法让 ListView 不在 ScrollView 中或禁用滚动?

【问题讨论】:

    标签: android listview scrollview


    【解决方案1】:

    另一种方法是将ListView 包装在您设计的任何自定义滚动解决方案中。如果您只是将ListView 的高度设置为与所有行一样高(使用列表视图的LayoutParams),那么它将像普通视图一样运行,并且无法滚动;因此您可以将其添加到另一个滚动视图。这种方法的难点在于你必须提前知道你的列表的高度,所以你必须知道每一行的高度。此外,这将一次创建所有行,因此您将无法利用视图回收功能。

    如果您没有提前计算高度的简单方法,您可以通过覆盖 onMeasure 并为其提供您自己的高度规范来欺骗 ListView 为您计算:

    // Calculate height of the entire list by providing a very large 
    // height hint.  But do not use the highest 2 bits of this integer; 
    //  those are reserved for the MeasureSpec mode.
    int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
            MeasureSpec.AT_MOST);
    super.onMeasure(widthMeasureSpec, expandSpec);
    

    【讨论】:

    • 你们这里的 cmets 非常有帮助。我向你致敬。
    【解决方案2】:

    ListView 不在ScrollView 中。 ListView 会本能地滚动。我不相信您可以通过简单的 API 禁用滚动。如果是这样,您的选择是继承 ListView 并尝试找到覆盖滚动行为的方法,克隆 ListView 并消除滚动行为,或者编写自己的 AdapterView 以按照您想要的方式呈现事物。

    【讨论】:

      猜你喜欢
      • 2015-05-22
      • 1970-01-01
      • 1970-01-01
      • 2013-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-21
      相关资源
      最近更新 更多