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開發人員博客) –