Переход от одного фрагмента к другому фрагменту - PullRequest
0 голосов
/ 16 февраля 2019

Последние два дня я провожу в интернете в поисках решения следующей проблемы: у меня есть класс адаптера на вкладке в ViewPager. Я пытаюсь вызвать фрагмент по событию click с помощью диспетчера фрагментов.Когда фрагмент вызывается, все в порядке, но когда я пытаюсь вернуться назад, предыдущая вкладка в последней позиции не отображается, вместо этого отображается основное действие.

в адаптере:

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

Во фрагменте

getFragmentManager().popBackStackImmediate();

для возврата к предыдущему фрагменту, но не для меня, только перенаправление p для основной активности

Ответы [ 4 ]

0 голосов
/ 16 февраля 2019

Если вы используете viewpager внутри фрагмента, тогда используйте фрагмент childFragmentManager вместо fragManager.

Класс фрагмента:

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;
        }

    }
0 голосов
/ 16 февраля 2019

Вы хотите сказать, как загрузить предыдущий фрагмент вместо Activity?Если это ваше требование, выполните следующие действия в методе onBackPressed (), если вы добавляете фрагмент в задний стек:

onBackPressed() {
     super.onBackPressed();
     getActivity().getFragmentManager().popBackStack();
}
0 голосов
/ 16 февраля 2019

ОС Android обеспечивает функцию обратного стека для Activity, а также функцию обратного стека для Fragment.Если вы добавите один фрагмент в задний стек, при нажатии на меню возврата устройства Android вы сможете найти фрагмент, сохраненный во всплывающем стеке.Пока все сохраненные фрагменты во всплывающем стеке не появятся, действие будет завершено.

fragmentTransaction.addToBackStack(true);
0 голосов
/ 16 февраля 2019

Кажется, что фрагменты не добавляются в backstack.Предполагая, что вы используете FragmentTransaction, добавьте эту строку кода вместе с другим кодом для обмена фрагментами:

fragmentTransaction.addToBackStack(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...