【问题标题】:Android nested ViewPager's fragments dont show after switch between Fragments on Activity在 Activity 的片段之间切换后,Android 嵌套的 ViewPager 片段不显示
【发布时间】:2015-05-08 12:40:07
【问题描述】:

在我的应用程序中,我有一个 Activity 并且有一些片段,我可以毫无问题地在片段之间切换。其中一个片段有ViewPager 和其他一些片段,在使用viewPager 在父片段abd 之间切换回嵌套片段后,嵌套片段不显示,我必须关闭应用程序并再次运行以显示。

主要活动:

public void updateFragment(int selectedItem) {
    mFragment = null;
    fts = getSupportFragmentManager().beginTransaction();
    switch (selectedItem) {
        case 0:
            mFragment = new FragmentMainView();
            break;
        case 1:
            mFragment = new FragmentAddNewWayBill();
            break;
    }
    fts.replace(R.id.mainViewFragments, mFragment, "0");
    fts.commit();
    mDrawerState = false;
}

在这段代码中,我可以在片段之间切换。 FragmentMainView() 有带有一些已定义片段的 ViewPager。

public class FragmentMainView extends Fragment {
    private FragmentActivity myContext;
    private ViewPager vpPager;
    private FragmentManager fragManager;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

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

        G.currentActivity = FragmentMainView.this.getActivity();
        fragManager = myContext.getSupportFragmentManager();
        vpPager = (ViewPager) view.findViewById(R.id.vpPager);
        MyPagerAdapter adapterViewPager = new MyPagerAdapter(fragManager);
        vpPager.setAdapter(adapterViewPager);

        return view;
    }

    public static class MyPagerAdapter extends FragmentPagerAdapter {
        private static int NUM_ITEMS = 2;

        public MyPagerAdapter(FragmentManager fragmentManager) {
            super(fragmentManager);
        }

        // Returns total number of pages
        @Override
        public int getCount() {
            return NUM_ITEMS;
        }

        // Returns the fragment to display for that page
        @Override
        public Fragment getItem(int position) {
            switch (position) {
                case 0:
                    return FragmentOne.newInstance(0);
                case 1:
                    return FragmentTwo.newInstance(1);
                default:
                    return null;
            }
        }

        // Returns the page title for the top indicator
        @Override
        public CharSequence getPageTitle(int position) {
            String tabHeaderTitle = "";
            switch (position) {
                case 0:
                    tabHeaderTitle = UC.getString(R.string.waybill_register_package_owner);
                    break;
                case 1:
                    tabHeaderTitle = UC.getString(R.string.create_new_waybill);
                    break;
            }
            return tabHeaderTitle;
        }
    }
    @Override
    public void onAttach(Activity activity) {
        myContext=(FragmentActivity) activity;
        super.onAttach(activity);
    }

    @Override
    public void onResume() {
        super.onResume();
    }
}

在第一次打开FragmentMainView()MainActivityFragmentMainView() 上的片段进入ViewPager 工作正常并显示,但在MainActivity 中打开FragmentAddNewWayBill() 并再次切换到FragmentMainView() viewPager 上的片段不显示和我必须关闭应用程序并再次切换以显示。有什么问题?

【问题讨论】:

    标签: android android-fragments


    【解决方案1】:

    使用嵌套片段时,您必须使用getChildFragmentManager() 而不是myContext.getSupportFragmentManager()

    【讨论】:

    • 您的目的是我必须在FragmentMainView 中使用getChildFragmentManager 而不是getSupportFragmentManager?我得到这个错误:can not resolve method getSupportFragmentManager`
    • 是的。您需要将fragManager = myContext.getSupportFragmentManager(); 替换为fragManager = getChildFragmentManager();
    • 我得到这个错误:can not resolve method getSupportFragmentManager
    • 使用getFragmentManager();
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多