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);
}
}
}
getChildFragmentManager():調用需要API級別17,並且我有min = 15。所以唯一的方法是使用支持'Fragment',對吧? – jul 2014-09-12 13:14:44
是的,可悲的事實是,我不得不通過支持片段來替換我所有的片段,以便能夠使用getChildFragmentManager() – jul 2014-09-12 13:48:34
@jul:是的,嵌套片段的概念僅添加到API級別17中片段的本地實現。您的替代方案可能不是將'ViewPager'放在一個片段中,或者沒有片段作爲'ViewPager'的頁面。 – CommonsWare 2014-09-12 20:24:19