从一个片段导航到另一个片段

时间:2019-02-16 06:56:08

标签: android android-fragments

我花了近两天的时间在网上冲浪,以寻找下一个问题的解决方案: 我在ViewPager的选项卡中有一个适配器类,我尝试使用片段管理器在click事件中调用片段。调用片段时,一切正常,但是当我尝试返回时,最后一个位置的前一个选项卡未显示,而是显示了主要活动。

在适配器中:

FragmentManager fm = ((MainActivity) v.getContext()).getSupportFragmentManager();
                FragmentTransaction ft = fm.beginTransaction()
                        .add(R.id.root, fragment)
                        .addToBackStack(null);
                ft.commit();

片段

getFragmentManager().popBackStackImmediate();

返回上一个片段,但不适用于我,仅重定向pfor主要活动

4 个答案:

答案 0 :(得分:0)

似乎没有将片段添加到backstack中。假设您正在使用FragmentTransaction,请将以下代码行与其他代码一起添加以交换片段:

fragmentTransaction.addToBackStack(true);

答案 1 :(得分:0)

您的意思是说,如何加载以前的片段而不是活动?如果这是您的要求,请在onBackPressed()方法中执行以下操作(如果要在后向堆栈中添加片段):

onBackPressed() {
     super.onBackPressed();
     getActivity().getFragmentManager().popBackStack();
}

答案 2 :(得分:0)

Android OS为Activity提供了后退功能,还为Fragment提供了后退功能。如果您将一个片段添加到后堆栈中,那么当您按下android设备的后退菜单时,您会找到保存在后堆栈弹出窗口中的片段。直到所有保存的Fragments都返回到堆栈后,该活动才会退出。

fragmentTransaction.addToBackStack(true);

答案 3 :(得分:0)

如果您在片段内部使用viewpager,请使用片段的childFragmentManager而不是fragmentManager。

片段类:

adapterViewPager = new MyPagerAdapter(getChildFragmentManager());
vpPager.setAdapter(adapterViewPager);

适配器类:

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

        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: // Fragment # 0 - This will show FirstFragment
                return FirstFragment.newInstance(0, "Page # 1");
            case 1: // Fragment # 0 - This will show FirstFragment different title
                return FirstFragment.newInstance(1, "Page # 2");
            case 2: // Fragment # 1 - This will show SecondFragment
                return SecondFragment.newInstance(2, "Page # 3");
            default:
                return null;
            }
        }

        // Returns the page title for the top indicator
        @Override
        public CharSequence getPageTitle(int position) {
            return "Page " + position;
        }

    }