如何正确地使用嵌套片段(Fragment)?
如何正确地使用嵌套片段(Fragment)?
我有4个片段,其中一个片段包含一个ViewPager和一个不同的类,在该类中定义了ViewPager的适配器,其中包含3个其他片段。当我第一次打开这个片段时,所有的子片段都会正确显示在ViewPager中,但是当我切换到另一个片段(我使用transaction.replace)并再次返回到这里时,子片段就消失了。我无法使用ChildFragmentManager,因为代码中显示错误(无法解析ChildFragmentManager到类型(我已经更新了最新的支持库)),如何在每次显示这个片段时加载这些子片段?
以下是部分代码:
public class MainFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_mainfragment1, null); mPager = (ViewPager) view.findViewById(R.id.fMainPager); mPagerAdapter = new SubFragmentMainPagerAdapter(getFragmentManager()); mPager.setAdapter(mPagerAdapter); mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { @Override public void onPageSelected(int position) { mActionBar.setSelectedNavigationItem(position); } }); // mPager.setCurrentItem(1); return view; } } public class SubFragmentMainPagerAdapter extends FragmentPagerAdapter { private Context mContext; FragmentManager fragMan; public SubFragmentMainPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int e) { switch (e) { case 0: return new SubFragment_1(); case 1: return new SubFragment_2(); case 2: return new SubFragment_3(); } return null; } @Override public int getCount() { return 3; } }
Fragment嵌套Fragment使用不正确的原因可能是以下几点:
1. 使用了android.app.Fragment而不是android.support.v4.app.Fragment。
2. 使用了getFragmentManager而不是getSupportFragmentManager。
3. 没有使用getChildFragmentManager()来处理嵌套的Fragment。
4. 没有使用AppCompatActivity。
解决方法如下:
1. 使用android.support.v4.app.Fragment代替android.app.Fragment。
2. 使用getSupportFragmentManager()代替getFragmentManager。
3. 使用getChildFragmentManager()来处理嵌套的Fragment。
4. 切换到使用AppCompatActivity。
确保所有Fragment都使用了support.v4库,如果有兴趣可以查阅更多关于AppCompatActivity的信息。如果你的应用中有使用到ActionBarActivity或FragmentActivity,尝试使用AppCompatActivity替代。如果使用了SupportFragmentManager,可能会出现当前子Fragment的视图消失的问题,只显示了2个子Fragment而不是3个子Fragment,如果再次尝试切换Fragment,可能只剩下一个子Fragment。
以上就是关于如何正确使用嵌套Fragment的问题及解决方法的整理。