Как переключаться между фрагментами, фактически не перекрывая предыдущие фрагменты - PullRequest
0 голосов
/ 25 июня 2018

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

Это мой OnNavigationItemSelectedListener

private void enableNavigation(){
    bottomNav.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
        @Override
        public boolean onNavigationItemSelected(@NonNull MenuItem item) {
            switch(item.getItemId()){
                case R.id.btnHome:
                    HomeFragment homeFragment = new HomeFragment();
                    android.support.v4.app.FragmentManager manager = getSupportFragmentManager();
                    manager.beginTransaction().replace(R.id.container, homeFragment).commit();
                    return true;
                case R.id.btnChats:
                    ChatsFragment chatsFragment = new ChatsFragment();
                    android.support.v4.app.FragmentManager manager1 = getSupportFragmentManager();
                    manager1.beginTransaction().replace(R.id.container, chatsFragment).commit();
                    return true;
                case R.id.btnPost:
                    PostsFragment postsFragment = new PostsFragment();
                    android.support.v4.app.FragmentManager manager2 = getSupportFragmentManager();
                    manager2.beginTransaction().replace(R.id.container, postsFragment).commit();
                    return true;
                case R.id.btnFavourites:;
                    FavouritesFragment favouritesFragment = new FavouritesFragment();
                    android.support.v4.app.FragmentManager manager3 = getSupportFragmentManager();
                    manager3.beginTransaction().replace(R.id.container, favouritesFragment).commit();
                    return true;
                case R.id.btnProfile:
                    ProfileFragment profileFragment = new ProfileFragment();
                    android.support.v4.app.FragmentManager manager4 = getSupportFragmentManager();
                    manager4.beginTransaction().replace(R.id.container, profileFragment).commit();
                    return true;
            }
            return false;
        }
    });

Любой, имеющийЛюбое решение, пожалуйста, дайте мне знать ..

1 Ответ

0 голосов
/ 25 июня 2018

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

Например, давайте используем ваш ChatFragment.

* 1007.* Вместо выражения switch вы помещаете объявление ChatsFragment chatsfragment в верхнюю часть Activity, так что это переменная всего экземпляра.Внутри вашего оператора switch вместо создания нового экземпляра каждый раз вы идете
case R.id.btnChats:
  if(chatsFragment == null) chatsFragment = new ChatsFragment();
  android.support.v4.app.FragmentManager manager1 = getSupportFragmentManager();
  manager1.beginTransaction().replace(R.id.container, chatsFragment).commit();
  return true;

Теперь вы перестраиваете фрагмент только один раз, когда он вызывается впервые.С этого момента старый экземпляр используется повторно.

...