我已阅读很多帖子,说明ListView不应嵌套在ScrollView中。
我想知道这是否适用于所有AdapterView?
在为一个将嵌套在ScrollView中的自定义列表视图编写一大堆代码之后,先了解它是有帮助的。我想将它基于AdapterView,以便我可以像标准ListView一样使用它(以帮助最小化我当前ListView相关代码的重写)。
谢谢。
答案 0 :(得分:3)
我想知道这是否适用于所有AdapterView?
总的来说,ScrollView
与其他孩子的关系并不好。
在为一个将嵌套在ScrollView中的自定义列表视图编写一大堆代码之后,先了解它是有帮助的。
无需在ListView
中添加ScrollView
。只需将ScrollView
中的其他内容放入ListView
本身,作为页眉/页脚视图,或使用my MergeAdapter
或类似技术。
我想将它基于AdapterView,以便我可以像标准的ListView
一样使用它
从头开始创建自定义AdapterView
并不容易。如果您查看ListView
及其AbsListView
直接父级的源代码,则会有几千行代码。根据前面的段落,将ScrollView
的内容放入ListView
会更简单。
答案 1 :(得分:0)
我认为如果你想在ScrollView中嵌套ListView将会有效。它使用起来很简单,因为它扩展了ListView并且只覆盖了一个方法。
唯一的错误是您可能需要使用scrollView.smoothScrollTo(0, 0)
将滚动位置设置为头部。
public class ScrollListView extends ListView{
public ScrollListView(Context context) {
super(context);
}
public ScrollListView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public ScrollListView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
最后,将滚动位置设置为head。
scrollView.smoothScrollTo(0, 0)