我想要 ListView 中的一些好东西,比如能够使用 ListAdapter 和项目选择等,但我不想要它的 ScrollView 部分。我想以不同的方式自己实现这部分(为什么或如何这样做并不是这个问题的重点,所以请不要问“为什么”)。
有没有办法让 ListView 不在 ScrollView 中或禁用滚动?
我想要 ListView 中的一些好东西,比如能够使用 ListAdapter 和项目选择等,但我不想要它的 ScrollView 部分。我想以不同的方式自己实现这部分(为什么或如何这样做并不是这个问题的重点,所以请不要问“为什么”)。
有没有办法让 ListView 不在 ScrollView 中或禁用滚动?
执行此操作的另一种方法是将其包装ListView
在您编写的任何自定义滚动解决方案中。如果您只是将 的高度设置ListView
为与所有行的高度完全相同(使用列表视图的LayoutParams
),那么它将像普通视图一样运行并且无法滚动;因此您可以将其添加到另一个滚动视图。这种方法的难点在于你必须提前知道你的列表的高度,所以你必须知道每一行的高度。此外,这将一次创建所有行,因此您将无法利用视图回收功能。
如果您没有一种简单的方法来提前计算高度,您可以通过覆盖并给它自己的高度规格来欺骗ListView
您为您做这件事:onMeasure
// 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);
AListView
不在 a 中ScrollView
。AListView
会本能地滚动。我不相信您可以通过简单的 API 禁用滚动。如果是这样,您的选择是子类ListView
化并尝试找到覆盖滚动行为、克隆ListView
和消除滚动行为的方法,或者编写您自己AdapterView
的以您想要的方式呈现事物的方法。