我的ListView(StickyListHeadersListView)不保存确切的滚动位置。我引用这一点:如何保存使用CursorAdapter的ListView的滚动位置?
Maintain/Save/Restore scroll position when returning to a ListView
当用户点击列表中的一个项目,我使用SharedPreferences应用程序过渡到活动之前保存的“指数”和“顶”。当我按回活动返回到带有ListView的片段时,列表将从它离开时进入第一个可见列表项的顶部,但不是确切的位置(即,如果第一个可见项被中途切断,回到片段时应该中途切断)。
换句话说,偏移不是保存。就像我说的那样,它可以保存第一个可见的位置,但确切的滚动不会被保存。
mAdapter = new PeopleAdapter(getActivity(), null);
mList = (StickyListHeadersListView) rootView.findViewById(R.id.stickyList);
mList.setAdapter(mAdapter);
mList.setAreHeadersSticky(true);
mList.setDividerHeight(0);
mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Cursor cursor = mAdapter.getCursor();
if (cursor != null && cursor.moveToPosition(position)) {
MainActivity.setIndex(mList.getFirstVisiblePosition());
View v = mList.getListChildAt(0);
int top = (v == null) ? 0 : (v.getTop() - mList.getPaddingTop());
MainActivity.setTop(top);
Intent intent = new Intent(getActivity(), ContactDetailActivity.class);
startActivity(intent);
}
});
光标加载完成后,我打电话
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
android.util.Log.i(TAG, "Cursor loaded. (" + data.getCount() + " rows)");
mList.setSelectionFromTop(MainActivity.getIndex(), MainActivity.getTop());
mAdapter.changeCursor(data);
mAdapter.notifyDataSetChanged();
}