Добрый день! Ищу помощь в решении такой проблемы:
Имеется основная Activity с NavigationDrawer, в которую загружаются разные фрагменты.
Необходимо реализовать возврат на предыдущий фрагмент по кнопке Назад.
Использую для этого popBackStack, все работает, но при возвращении на фрагменты, содержащие RecyclerView, все элементы внутри него начинают дублироваться, например:
При первом открытии фрагмента имеем список:
Позиция 1
Позиция 2
Позиция 3
При возврате на этот фрагмент через BackStack:
Позиция 1
Позиция 2
Позиция 3
Позиция 1
Позиция 2
Позиция 3
Код Drawer'a для переключения фрагментов:
public boolean onNavigationItemSelected(MenuItem item) {
// Handle navigation view item clicks here.
android.app.FragmentManager fm=getFragmentManager();
fm.popBackStack(null, fm.POP_BACK_STACK_INCLUSIVE);
int id = item.getItemId();
if (id == R.id.menu_userpage) {
fm.beginTransaction().replace(R.id.content_frame,new UserFragment()).addToBackStack("UserFragment").commit();
setTitle("Моя страница");
} else if (id == R.id.menu_grouplist_all) {
Bundle arguments = new Bundle();
arguments.putString("for_user","0");
Fragment newFragment=new GroupListFragment();
newFragment.setArguments(arguments);
fm.beginTransaction().replace(R.id.content_frame,newFragment).addToBackStack("GroupListFragment").commit();
setTitle("Группы");
} else if (id == R.id.menu_task_all) {
Fragment newFragment=new TaskListAllFragment();
fm.beginTransaction().replace(R.id.content_frame,newFragment).addToBackStack("TaskListFragment").commit();
setTitle("Задания");
}
}
Код BackStack
public void onBackPressed() {
//super.onBackPressed();
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
if (drawer.isDrawerOpen(GravityCompat.START)) {
drawer.closeDrawer(GravityCompat.START);
} else {
android.app.FragmentManager fm=getFragmentManager();
int backstack_count=fm.getBackStackEntryCount();
if (backstack_count>1) {
fm.popBackStack();
backstack_count--;
} else {
fm.beginTransaction().replace(R.id.content_frame,new UserFragment()).addToBackStack("UserFragment").commit();
}
}
}
Fragment, BackStack и Recyclerview
Re: Fragment, BackStack и Recyclerview
Проблема скорее всего во фрагменте, код которого вы не показали.
Re: Fragment, BackStack и Recyclerview
Уже разобрался, необходимо было перед добавлением элементов в ArrayList, который находится внутри RecyclerView проверять их количество и добавлять новые, если count(ArrayList)=0.
Почему-то при возврате назад фрагмент не очищает список, загруженный при предыдущем открытии этого фрагмента.
Почему-то при возврате назад фрагмент не очищает список, загруженный при предыдущем открытии этого фрагмента.