Android ListView setSelection() does not seem to work

前端 未结 17 1727
情歌与酒
情歌与酒 2020-11-28 06:45

I have a ListActivity that implements onListItemClick() and calls a doSomething() function of the class. The latter contains l.s

17条回答
  •  暖寄归人
    2020-11-28 06:51

    You can try 2 ways like these:
    Solution A:

        mListView.post(new Runnable() {
            @Override
            public void run() {
                if (null != mListView) {
                    mListView.clearFocus();
                    mListView.requestFocusFromTouch();
                    mListView.setSelection(0);
                }
            }
        });
    

    In some complicated situation, this solution will bring some new problems in Android 8.x.
    Besides it may cause unexpected onFocusChange().

    Solution B: Define a custom view extends ListView. Override method handleDataChanged().Then setSelection(0). In CustomListView:

    @Override
    protected void handleDataChanged() {
        super.handleDataChanged();
        if (null != mHandleDataChangedListener){
            mHandleDataChangedListener.onChanged();
        }
    }
    HandleDataChangedListener mHandleDataChangedListener;
    
    public void setHandleDataChangedListener(HandleDataChangedListener handleDataChangedListener) {
        this.mHandleDataChangedListener = handleDataChangedListener;
    }
    
    public interface HandleDataChangedListener{
        void onChanged();
    }
    

    In activity:

        mListView.setHandleDataChangedListener(new CustomListView.HandleDataChangedListener() {
            @Override
            public void onChanged() {
                mListView.setHandleDataChangedListener(null);
                mListView.setSelection(0);
            }
        });
        mAdapter.notifyDataSetChanged();
    

    Ok, That's it.

提交回复
热议问题