6

私はViewPager4つのタブを持っています。

を拡張するカスタム アダプターを使用していますFragmentPagerAdapter

問題は、タブを変更するとFragment、現在表示されていないにもかかわらず、最初のタブが再度作成されることです。さらに、これはタブを4回変更した後にのみ発生します。たとえば、tab1 -> tab2 -> tab3=> onStopfrom tab1 が呼び出されます。-> tab2 => onCreateViewtab1 から呼び出されます (onAttachは呼び出されません)。

これは避けたい。現在表示されていない場合でも、すべてのタブが常にその状態を維持する必要があります。これどうやってするの?

4

3 に答える 3

24

setOffscreenPageLimit()のメソッドを使用するのと同じくらい簡単ViewPagerです。

詳細: http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

于 2013-01-17T19:32:44.783 に答える
0

フラグメントをインスタンス化するときは、 を呼び出しますsetRetainInstance(true)。これにより、フラグメントのインスタンスの状態が保持されます。onCreateViewは引き続き呼び出され、保存された状態を再利用し、データを再度ロードせずにビューをレンダリングするだけであることを確認する必要があります。たとえばboolean、フラグメントが既に初期化されているかどうかを表すために a を使用します。

次のようにします。

public static class MyAdapter extends FragmentPagerAdapter {
       @Override
       public Fragment getItem(int position) {
               MyFragment myFragment = new MyFragment();
               myFragment.setRetainInstance(true);
               return myFragment;
       }
}

class MyFragment extends Fragment {
       .
       .
       .

       boolean initialized = false;
       ArrayList<MyData> myData = null;

       void onCreate(...) {
               if (initialized) {
                       renderViews();
               } else {
                       initialized = true;
                       loadData();
                       renderViews();
               }
       }
}

を実装する必要はありませんonSaveInstanceState()。自動的に処理されます。

于 2013-01-04T13:46:54.010 に答える