使用`CursorAdapter`时,通过`ListView.setSelection`跳转到某个项目

时间:2014-06-08 10:58:35

标签: android listview android-listview android-cursoradapter

我想在android上实现恢复列表视图状态功能。我的想法是在调用onPause函数时保存getFirstVisiblePosition(),并在调用onResume函数时使用setSelection()恢复状态(向下滚动一个litter位以匹配getFirstVisiblePosition())。代码如下所示:

@Override
protected void onPause() {
    selectedItemPosition = listView.getFirstVisiblePosition();
    getSharedPreferences(TAG, MODE_PRIVATE)
            .edit()
            .putInt("list_selection", selectedItemPosition)
            .commit();
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
    final int newSelection = getSharedPreferences(TAG, MODE_PRIVATE).getInt("list_selection", 0);
    if (newSelection != selectedItemPosition) {
        selectedItemPosition = newSelection;
        listView.post(new Runnable() {
            @Override
            public void run() {
                listView.setSelection(selectedItemPosition);
            }
        });
    }
}

我认为在使用ArrayAdapter时使用CursorAdapter时效果会很好。将cursorAdapter.getCount() == 0调用setSelection方法,这会使setSelection无法正常工作。

所以我的问题是如何让setSelectionCursorAdapter合作?

1 个答案:

答案 0 :(得分:0)

我应该将onResume中的代码移到LoaderManager.LoaderCallbacks<Cursor>.onLoadedFinished,这会使cursorAdapter.getCount()等于实数。