8

我有Fragment MyFragment包含ViewPager包含更多Fragment。它在我第一次加載MyFragment時正常工作,但是如果我回去重新創建它,則ViewPager中的Fragments未顯示,因爲未調用方法FragmentPagerAdapter.getItem當重新創建包含片段時,ViewPager中的片段未加載

我正在使用

怎麼了?

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

回答

22

如果您正在使用嵌套的片段(「我有一個片段MyFragment聖維特含有較多的片段ViewPager」),你需要設置你的FragmentPagerAdapter時使用getChildFragmentManager(),不getFragmentManager()

+0

getChildFragmentManager():調用需要API級別17,並且我有min = 15。所以唯一的方法是使用支持'Fragment',對吧? – jul 2014-09-12 13:14:44

+0

是的,可悲的事實是,我不得不通過支持片段來替換我所有的片段,以便能夠使用getChildFragmentManager() – jul 2014-09-12 13:48:34

+0

@jul:是的,嵌套片段的概念僅添加到API級別17中片段的本地實現。您的替代方案可能不是將'ViewPager'放在一個片段中,或者沒有片段作爲'ViewPager'的頁面。 – CommonsWare 2014-09-12 20:24:19

相關問題