Менять местами фрагменты вместо замены? - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь создать нижнее навигационное меню, подобное WhatsApp, Viber и т. Д., Где я переключаюсь между фрагментами.Я получил несколько работающий фрагмент-менеджер, заменяющий фрагменты, но, как оказалось, это воссоздает замененные фрагменты, когда я хочу вернуться на одну из страниц меню, которые я ранее посетил, изменил и т. Д.

 @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        Fragment fragment = null;

        switch (item.getItemId()) {
            case R.id.navigation_discover:
                fragment = findFragment(RPageFragment.getTAG());
                if(fragment == null){
                    fragment = RPageFragment.newInstance();
                    mFragmentManager.beginTransaction().add(R.id.fragment_container, fragment, fragment.getTag()).commit();
                }
                break;

            case R.id.navigation_booked:

                fragment = findFragment(MapViewFragment.getTAG());
                if(fragment == null){
                    fragment = MapViewFragment.newInstance();
                    mFragmentManager.beginTransaction().add(R.id.fragment_container, fragment, fragment.getTag()).commit();

                }
                break;

            case R.id.navigation_me:
                fragment = findFragment(ProfilePageFragment.getTAG());
                if(fragment == null){
                    fragment = ProfilePageFragment.newInstance();
                    mFragmentManager.beginTransaction().add(R.id.fragment_container, fragment, fragment.getTag()).commit();
                }
                break;
        }
        //Invalid menu option
        if (fragment == null)
            return false;

        mFragmentManager.beginTransaction().replace(R.id.fragment_container,fragment).commit();
        return true;
    }

Есть ли способ поменять фрагменты, сохранив их вид, состояние и т. Д., Аналогично тому, как работает WhatsApp?(Например, у меня есть фрагмент mapView, и я хотел бы, чтобы, когда я вернусь к нему, я показывал способ, которым я его оставил, а не воссоздаю mapView)

1 Ответ

0 голосов
/ 06 декабря 2018

Вы можете использовать Как реализовать ViewPager с различными фрагментами / макетами

Вы можете просто проверить, если объект фрагмента null, как показано ниже, например:

case R.id.navigation_me:
        fragment = findFragment(ProfilePageFragment.getTAG());
        if (fragment == null) {
            mFragmentManager.beginTransaction().show(fragment);
        } else {
            fragment = ProfilePageFragment.newInstance();
            mFragmentManager.beginTransaction().add(R.id.fragment_container, fragment, fragment.getTag()).commit();
        }

        // and you can hide all other fragments here with
        fragmentRPage = findFragment(RPageFragment.getTAG());
        if (fragmentRPage == null) {
            mFragmentManager.beginTransaction().hide(fragmentRPage);
        }
        fragmentMapView = findFragment(MapViewFragment.getTAG());
        if (fragmentMapView == null) {
            mFragmentManager.beginTransaction().hide(fragmentMapView);
        }
        //... and hide other fragments

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