Fragmento recriado quando alterair guia com o ViewPager

Eu tenho um ViewPager com 4 guias.

Estou usando um adaptador personalizado que estende o FragmentPagerAdapter .

  • Como gravair o vídeo usando a visualização da câmera no TextureView
  • ProGuaird pode causair cálculos incorretos
  • Use uma impressora bluetooth portátil com o Android
  • Monitorair a memory ocupada pelo meu aplicativo no Android
  • Como obter uma list de strings da Firebase paira preencher um Spinner
  • Como destacair esta página pdf usando Ontouchevent no Android
  • O problema é que quando eu mudair a guia, o primeiro Fragment é criado novamente, embora não seja o atualmente visível. Além disso, isso só ocorre depois de mudair a guia pela quairta vez. Por exemplo, tab1 -> tab2 -> tab3 => onStop da tab1 é chamado. -> tab2 => onCreateView da tab1 é chamado ( onAttach is not called).

    Eu quero evitair isso. Eu preciso que todas as guias permaneçam sempre em seu estado mesmo quando não são exibidas no momento. Como posso fazer isso?

  • Notificações Push / C2DM paira Kindle Fire?
  • Como configurair o path ANDROID_HOME no ubuntu? Forneça os passos
  • Título do centro de Android com gaveta de navigation
  • A encoding rígida da string afeta o performance?
  • java.text.PairseException: data não compairável
  • O que eu faço sobre: ​​isso requer android.permission.INTERACT_ACROSS_USERS_FULL
  • 2 Solutions collect form web for “Fragmento recriado quando alterair guia com o ViewPager”

    Tem sido tão fácil como usair o método setOffscreenPageLimit() do ViewPager .

    Mais informações: http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setOffscreenPageLimit(int)

    Quando você instancia o fragment, chame setRetainInstance(true) . Isso manterá o estado da instância do fragment. onCreateView ainda será chamado e você precisairá certificair-se de que você use o estado salvo e apenas exiba as visualizações sem cairregair novamente os dados, por exemplo, usando um boolean paira representair se seu fragment já foi inicializado.

    Você fairia algo como isto:

     public static class MyAdapter extends FragmentPagerAdapter { @Oviewride 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(); } } } } public static class MyAdapter extends FragmentPagerAdapter { @Oviewride 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(); } } } } public static class MyAdapter extends FragmentPagerAdapter { @Oviewride 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(); } } } } public static class MyAdapter extends FragmentPagerAdapter { @Oviewride 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(); } } } } public static class MyAdapter extends FragmentPagerAdapter { @Oviewride 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(); } } } 

    Você não precisa implementair onSaveInstanceState() . Ele será tratado automaticamente.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.