8

Fragment MyFragment ile ilgili daha fazla Fragment içeren ViewPager var. MyFragment'i ilk kez yüklediğimde düzgün çalışıyor ancak geri dönüp yeniden oluşturursamViewPager yöntemi, FragmentPagerAdapter.getItem yönteminin çağrılmadığı için gösterilmiyor.İçerisindeki Parçacığı yeniden oluşturulduğunda değil ViewPager'daki fragmanlar yüklenmedi

kullanıyorum

kullanıyorum

Neyin var?

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); 
     } 
    } 
} 

cevap

22

iç içe geçmiş parçaları kullanıyorsanız, size FragmentPagerAdapter kurarken getChildFragmentManager() değil getFragmentManager() kullanmak gerekir ("Ben bir Parça MyFragment vith daha Fragment içeren bir ViewPager var").

+0

getChildFragmentManager(): Çağrı API düzeyi 17 gerektirir ve bende min = 15 var. Yani tek yol, 'Fragment' desteğini kullanmaktır, değil mi? – jul

+0

Evet, üzücü gerçek şu ki, tüm Fragments'ımı getChildFragmentManager() – jul

+0

'u kullanabilmek için Fragmenti destekleyerek değiştirmem gerekti. @jul: Evet, iç içe geçmiş fragmanlar kavramı yalnızca API Level 17'deki parçaların yerel uygulamasına eklendi. Alternatifleriniz, "ViewPager" ın bir parçacığa sahip olmaması veya "ViewPager" in sayfaları olarak parçalara sahip olmamasıdır. – CommonsWare