【问题标题】:Cannot get support FragmentManager inside Fragment - ViewPager inside Fragment无法在 Fragment 内获得支持 FragmentManager - ViewPager inside Fragment
【发布时间】:2016-08-02 12:17:50
【问题描述】:

我正在尝试使用 NavigationDrawer 创建活动,并且在一个片段内,我想放置 ViewPager。问题是,当我尝试创建新的 SectionPagerAdapter(扩展 FragmentPagerAdapter 的类)时,我无法为构造函数获取正确的 FragmentManager。

在我想放置 ViewPager 的地方有 navDrawer 片段的 onCreateView 代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.layout_anime, container, false);

    final ActionBar actionBar = getActivity().getActionBar();
    actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    //There is problem:
    mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager());
    mViewPager = (ViewPager) getActivity().findViewById(R.id.pager);
    mViewPager.setAdapter(mSectionsPagerAdapter);

    mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
        @Override
        public void onPageSelected(int position) {
            actionBar.setSelectedNavigationItem(position);
        }
    });

    for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
        actionBar.addTab(actionBar.newTab()
                .setText(mSectionsPagerAdapter.getPageTitle(i))
                .setTabListener(this));
    }

    return rootView;
}

SectionPagerAdapter 类:

public class SectionsPagerAdapter extends FragmentPagerAdapter {

    public SectionsPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        android.support.v4.app.Fragment fragment = new DummySectionFragment();
        Bundle args = new Bundle();
        args.putInt(DummySectionFragment.ARG_SECTION_NUMBER, position + 1);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public int getCount() {
        return 3;
    }

    @Override
    public CharSequence getPageTitle(int position) {
        Locale l = Locale.getDefault();
        switch (position) {
            case 0:
                return "Section 1".toUpperCase();
            case 1:
                return "Section 2".toUpperCase();
            case 2:
                return "Section 3".toUpperCase();
        }
        return null;
    }
}

和 DummySectionFragment:

    public static class DummySectionFragment extends android.support.v4.app.Fragment {
        public static final String ARG_SECTION_NUMBER = "section+number";

        public DummySectionFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

            View rootView = inflater.inflate(R.layout.layout_anime, container, false);
            ListView listView = (ListView) 

//My code here - http request and listView creating

        }

    }

现在调用getChuldFragmentManager()时出现错误,提示android.app.FragmentManager不能应用于android.support.v4.app.FragmentManager

已解决 我在课堂上扩展了 android.app.Fragment 而不是 android.support.v4.app.Fragment

【问题讨论】:

    标签: android android-fragments android-viewpager fragment fragmentmanager


    【解决方案1】:

    据此

    android.support.v4.FragmentManager 不能应用于 android.app.FragmentManager

    您在SectionsPagerAdapter 类中使用android.app.FragmentManager。将其更改为android.support.v4.FragmentManager

    【讨论】:

    • 对不起,我写错了,我的意思是android.app.FragmentManager不能应用于android.support.v4.app.FragmentManager,我不能改变构造函数,因为我不能调用super( fragmentManager) 正确
    • 如果包含此行的片段mSectionsPagerAdapter = new SectionsPagerAdapter(getChildFragmentManager()); 扩展支持片段getChildFragmentManager 返回支持片段。
    • 那是我的问题。我正在扩展 android.app.Fragment 而不是 android.support.v4.app.Fragment,您解决了这个问题,非常感谢!
    【解决方案2】:

    删除您的导入 import android.app.FragmentManager; 并添加此

    import android.support.v4.app.FragmentManager;

    【讨论】:

    • faranjit 解决了,非常感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 2013-10-03
    • 2018-08-22
    相关资源
    最近更新 更多