【问题标题】:Android ListView full scroll to the top while using clipToPadding="false"Android ListView 在使用 clipToPadding="false" 时完全滚动到顶部
【发布时间】:2015-07-28 14:17:12
【问题描述】:

我有这个小自定义 ListView 女巫实际上是一个带有一些回调的“ListView”。当我在启动 Activity(工具栏的高度)时动态更改填充时,项目不响应填充,我必须以某种方式滚动到顶部。

这是我的 ListWiew。

<somesustom.cutom.ObservableListView
        android:id="@+id/listview"
        android:clipToPadding="false"
        android:theme="@style/ListView"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" />

所以问题是如何从代码完全滚动到顶部?

所以我找到了解决办法

首先我从 xml 中删除了android:clipToPadding="false"。 然后我像这样配置了我的ObservableListView

public class ObservableListView extends ListView {


    private boolean clipPadding = true;

    public ObservableListView(Context context) {
        this(context, null, 0);
        setScrollListner();
    }

    public ObservableListView(Context context, AttributeSet attrs) {
        this(context, attrs, 0);
        setScrollListner();
    }

    public ObservableListView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        setScrollListner();
    }



    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        if(clipPadding)   /// this is the trick, if clip to padding is true, then set selection 0
            setSelection(0);
    }

    public void setScrollListner()
    {
        clipPadding = true;

        super.setOnScrollListener(new OnScrollListener() {
            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {

                if(clipPadding && scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
                    setClipToPadding(false);
                    clipPadding = false;  // if ii begin to scroll clipPadding 
                    // turns to false and onMeasure set selection not being called.
                }

            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {

            }
        });
    }

}

不确定如果我更改按钮单击时的填充我猜这个方法是否不起作用。但在我的情况下,我从 ViewTreeObserver.OnGlobalLayoutListener 设置填充,这工作得很好。

【问题讨论】:

    标签: android listview scroll


    【解决方案1】:

    您可以尝试以下两种方法中的一种或两种方法:

    listview.smoothScrollToPosition(0);
    

    listview.setSelection(0):
    

    【讨论】:

      猜你喜欢
      • 2011-02-22
      • 1970-01-01
      • 2018-01-26
      • 2014-07-04
      • 2012-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多