7
我遇到了ViewPager的问题,我的ListView失去了它的滚动位置。滑动ViewPager时,Fragment不会调用onSaveInstanceState?
ListView控件的状态可以很容易地存储和使用恢复:
@Override
public View onCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View v = inflater.inflate(R.layout.frag_cool_things, container, false);
AdvListView listView = (AdvListView) v.findViewById(R.id.lv0);
listView.setOnItemClickListener(mOnListItemClicked);
if (null != savedInstanceState)
{
listView.onRestoreListViewInstanceState(savedInstanceState.getParcelable("list_state"));
}
mListView = listView;
return v;
}
@Override
public void onSaveInstanceState (Bundle outState)
{
super.onSaveInstanceState(outState);
outState.putParcelable("list_state", mListView.onSaveListViewInstanceState());
}
然而,问题是,当片段被偷走onDestroyView()
被调用,但永远不会调用onSaveInstanceState (Bundle outState)
。
旋转屏幕等恢复ListView
状态很好,但刷卡我无法弄清楚如何正确地恢复列表。
我自己的临时解决方案是只写我的东西在的onPause()的SharedPreferences,并在OnCreateView让他们回来(... )。但是,这会迫使您访问附加活动以获取Sharedpreferences(getActivity()。getSharedPreferences(...)),并且您可能还需要在活动被拆除时显式删除不需要的内容(具体取决于您的操作存储,ofc)。希望有人有更好的方法! :) –
请参阅更新回答:) – Jona
“当您滑过列表时,FragmentPagerAdapter会分离每个片段,但将它们保存在内存中,以便在用户向后滑动时可以简单地重新附加它们。如果碎片数量较多, FragmentStatePagerAdapter值得考虑,因为它将删除它们,缺点是当用户滑回到它们时需要重建。因此,如果FragmentPagerAdapter具有更少,更复杂的片段,但考虑使用FragmentStatePagerAdapter来处理更大的集合。 (Android开发人员博客) –