2016-12-22 5 views
0

Привет ребята вот мой кодпредотвратить же фрагмент несколько раз в backstack

 
navigationView.setNavigationItemSelectedListener(new NavigationView 
       .OnNavigationItemSelectedListener() { 
      @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
       if (item.isChecked()) { 
        //item already selected. Do nothing 
        drawerLayout.closeDrawer(GravityCompat.START); 
        return true; 
       } 
       switch (item.getItemId()) { 
        case R.id.home: 
         FragmentTransaction transaction = getSupportFragmentManager() 
           .beginTransaction(); 
         transaction.replace(R.id.fragment, new HomeFragment()) 
           .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE).commit(); 
         break; 
        case R.id.other: 
         transaction = getSupportFragmentManager().beginTransaction(); 
         transaction.replace(R.id.fragment, new OtherFragment()) 
           .addToBackStack(null).setTransition(FragmentTransaction 
           .TRANSIT_FRAGMENT_FADE).commit(); 
         break; 
        default: 
         break; 
       } 
       drawerLayout.closeDrawer(GravityCompat.START); 
       return true; 
      } 
     }); 

Я в основном только 2 фрагмента и просто HomeFragment должны быть добавлены к backstack. После переключения между HomeFragment и OtherFragment на некоторое время и нажатия кнопки «Назад» во время HomeFragment, я получаю отображение HomeFragment несколько раз. Внутри HomeFragment находится recyclerview. Когда я просматриваю вверх и вниз, я могу видеть, что строки отображаются несколько раз. Как я могу убедиться, что HomeFragment добавлен в backstack только один раз.

Благодаря

ответ

0

При нажатии на пункт меню Home попытаться выяснить, есть ли какой-либо фрагмент в backstack или нет. Если да, вызовите popBackStack() или замените фрагмент так же, как и в противном случае. Используйте этот код:

if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportFragmentManager().popBackStack(); }

+0

Спасибо @janzoner за отличный ответ. Он работает как прелесть. Мой recyclerView не показывает данные всегда. Некоторые из них иногда иногда просто пусты. Weird – DeKekem

+0

Добро пожаловать. Надеюсь, вы устраните проблему с помощью RecyclerView. Если нет, попробуйте снова обратиться за помощью в StackOverflow. – janzoner

0

Вы можете легко проверить фрагмент с

YourFragment.isAdded 

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

Смежные вопросы