私はビューページャアダプタ(FragmentStatePagerAdapter)を作成し、ビューページャをこのアダプタに設定するアクティビティを持っています。アクティビティが破棄されたときのViewPagerとFragmentStatePagerAdapterの問題
これはビューポートアダプタが作成され、ビューページウィジェットに設定される方法です。
viewPageAdapter = new viewPageAdapter(getSupportFragmentManager(), getApplicationContext());
mCustomSwipeViewPager.setAdapter(viewPageAdapter);
そして、これは私が今viewPageAdapter
public class viewPagerAdapter extends FragmentStatePagerAdapter {
private SparseArray<Fragment> registeredFragments = new SparseArray<Fragment>();
public viewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// returning newly created fragment
}
@Override
public int getCount() {
// returning total count
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment fragment = (Fragment) super.instantiateItem(container, position);
// This is where i am putting created fragment in the sparse array,
// which i will be accessing in the activity based on position
// for updating fragment views.
registeredFragments.put(position, fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// And here i am removing it from the sparse array
registeredFragments.remove(position);
super.destroyItem(container, position, object);
}
}
を作成しています方法です、私は、開発者の選択肢に行って、「活動を続けるDONOT」にチェック。
これは問題が始まる場所です。このアクティビティを進めると、このアクティビティは破棄されますが、これは問題ありません。私は戻ってくる場合
は今、新しいアダプタが(のonCreateで作成された)とviewpagerに設定されているが、それは代わりに、それはで断片と、instantiateItem()を呼んだ、再びのgetItem()を呼び出していませんメモリはヌルです。私はデバッグモードでfragmentmanagerを確認
、フラグメントマネージャは、ヌルなど、すべてのフラグメントフィールドで、のActiveStateように2つの断片を保持しています。
私が試してみました物事... onDestroy(中フラグメントマネージャをクリアしようとしました
- ) fragmentManager.getFragments.clearを(使用して活動の)が、運。
- アダプターのgetItemCount()を0にし、onDestroy()のアダプターでnotifydatasetChanged()を呼び出しましたが、これは変わりません。
しかし、コメントアウトsuper.onSavedInstance()活動のをすれば、それが正常に働いているが、これは、それはいくつかのケースで失敗だと私は望んではありません。
新しいアダプタを作成してビューアに再度設定する方法はありますか?つまり、fragmentStateViewPagerAdapterのパフォーマンスを最小限に抑えずにgetItem()を最初の位置から呼び出す必要があります。
何か助けや助言をいただければ幸いです。
oh okaie .. !!!私はそれを試してみましょう。 – Ritesh