私のListViewがスクロール位置を失っているViewPagerに問題があります。ViewPagerをスワイプすると、フラグメントは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は、リストをスワイプしながら各フラグメントをデタッチしますが、ユーザーがスワイプしたときに簡単に再接続できるようにメモリに保持します。 FragmentPagerAdapterはそれを削除するので検討する価値がありますが、ユーザーが再びスワイプするときに再構築する必要があるという欠点があります。したがって、FragmentPagerAdapterは意味がありますが、大きなセットに対してはFragmentStatePagerAdapterを考慮してください。 (Android Dev Blog) –