我的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();
}