8

Ho un Fragment MyFragment con ViewPager contenente più Fragment. Funziona correttamente la prima volta che carico MyFragment, ma se torno indietro e lo ricrei, lo Fragments nello ViewPager non viene mostrato perché il metodo FragmentPagerAdapter.getItem non viene chiamato.Frammenti in ViewPager non caricati quando viene ricreato il frammento contenente

Sto usando

Cosa c'è che non va?

import android.app.Fragment; 
import android.app.FragmentManager; 
import android.support.v13.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
... 

public class MyFragment extends Fragment { 

    private ViewPager pager; 
    private MyPagerAdapter adapter; 

    private List<Fragment> fragmentList = new ArrayList<Fragment>(); 

    public MyFragment() {} 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
       Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.my_fragment_layout, container, false); 
    } 

    public void onViewCreated(View v, Bundle savedInstanceState) { 
     super.onViewCreated(v, savedInstanceState); 

     indicators = (PagerSlidingIndicator) v.findViewById(R.id.indicators); 
     pager = (ViewPager) v.findViewById(R.id.pager); 

     Fragment fragment1 = new Fragment1(); 
     fragmentList.add(fragment1); 

     Fragment fragment2 = new Fragment2(); 
     fragmentList.add(fragment2); 

     Fragment fragment3 = new Fragment3(); 
     fragmentList.add(fragment3); 

     adapter = new IndicatorPagerAdapter(getFragmentManager()); 
     pager.setAdapter(adapter); 
    } 

    public class MyPagerAdapter extends FragmentPagerAdapter { 

     public MyPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public int getCount() { 
      return fragmentList.size(); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      return fragmentList.get(position); 
     } 
    } 
} 

risposta

22

Se si utilizza frammenti annidati ("Ho un frammento MyFragment Vith un ViewPager contenente più Fragment"), è necessario utilizzare getChildFragmentManager(), non getFragmentManager(), prima di impostare il FragmentPagerAdapter.

+0

getChildFragmentManager(): la chiamata richiede il livello API 17 e ho min = 15. Quindi l'unico modo è usare il supporto 'Fragment', giusto? – jul

+0

Sì, la triste verità è che dovevo sostituire tutti i miei frammenti per supporto Fragment per poter usare getChildFragmentManager() – jul

+0

@jul: Sì, la nozione di frammenti nidificati è stata aggiunta solo all'implementazione nativa dei frammenti in API Livello 17 Le vostre alternative potrebbero essere o non avere il 'ViewPager' essere in un frammento o non avere frammenti come pagine del' ViewPager'. – CommonsWare

Problemi correlati