3

我已经阅读了许多帖子,指出 ListView 不应嵌套在 ScrollView 中。

我想知道这是否适用于所有 AdapterView 的一般情况?

在为将嵌套在 ScrollView 中的自定义列表视图编写一大堆代码之后,在发现之前了解会很有帮助。我想以 AdapterView 为基础,以便可以像使用标准 ListView 一样使用它(以帮助最大限度地减少对当前 ListView 相关代码的重写)。

谢谢你。

4

2 回答 2

3

我想知道这是否适用于所有 AdapterView 的一般情况?

总的来说,ScrollView和其他孩子玩得不太好。

在为将嵌套在 ScrollView 中的自定义列表视图编写一大堆代码之后,在发现之前了解会很有帮助。

无需将 a 放入 aListViewScrollView。只需将其他内容ScrollView放入ListView自身,作为页眉/页脚视图,或使用myMergeAdapter或类似技术。

我想以 AdapterView 为基础,以便可以像使用标准 ListView 一样使用它

AdapterView从头开始创建自定义并不容易。如果您查看 的源代码ListView及其AbsListView直接父级,则有数千行代码。根据我的前一段,将 的内容ScrollView放入中会简单得多。ListView

于 2013-01-25T20:54:57.237 回答
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);
    }
}

最后,将滚动位置设置为头部。

scrollView.smoothScrollTo(0, 0)
于 2015-10-31T10:41:23.200 回答