在加载游标后将ListView滚动到某个位置

时间:2011-09-05 04:38:44

标签: android

我有一个带ListView的片段,我希望ListView在保存和恢复片段时保持其滚动位置。通常这很简单,只需在保存时调用ListView.getFirstVisiblePosition(),并在恢复时调用ListView.setSelection()(ListView.setSelectionFromTop(),如果你想获得幻想)。

但是,我正在使用加载器,并且在活动开始时我的ListView没有完全填充。如果我在onActivityCreated()期间设置setSelection(),列表将无法滚动到任何内容,并且将忽略该调用。

我现在通过在将来的某个时间发布滚动来解决这个问题,但这绝对不是理想的。我希望它能在数据完成加载时向右滚动。我差不多这样做了,但是swapCursor()没有刷新,只是为将来安排了一个无效。

@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
    mAdapter.swapCursor(data);
    if (savedScrollPosition != null) {
        Log.d(TAG, "loaded and scrolling to " + savedScrollPosition);
        new Handler().postDelayed(new Runnable(){
            @Override
            public void run() {
                list.setSelection(savedScrollPosition);
                savedScrollPosition = null;
            }
        }, 100);
    }
}

当ListView完成数据填充时,你知道有什么方法可以直接滚动ListView吗?

1 个答案:

答案 0 :(得分:7)

试试这个:

listView.post(new Runnable() {

        @Override
        public void run() {
            listView.setSelection(savedScrollPosition);
            savedScrollPosition = null;
        }
    });