【发布时间】:2016-01-19 10:50:53
【问题描述】:
我的 ListView (StickyListHeadersListView) 不保存确切的滚动位置。我引用了这个:
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();
}
【问题讨论】: