如何正确地使用嵌套片段(Fragment)?

11 浏览
0 Comments

如何正确地使用嵌套片段(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;
    }
}

0
0 Comments

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的问题及解决方法的整理。

0