#android #android-fragments
#Android #android-фрагменты
Вопрос:
У меня есть боковой ящик для навигации между моими различными фрагментами, найдите код ниже.
public boolean onNavigationItemSelected(MenuItem item)
{
// Handle navigation view item clicks here.
int id = item.getItemId();
if (id == R.id.nav_dash)
{
FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
xfragmentTransaction.replace(R.id.containerView,new dashFragment()).commit();
}
else if (id == R.id.nav_profile)
{
FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.containerView,new profileFragment()).commit();
}
else if (id == R.id.nav_notify)
{
FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
xfragmentTransaction.replace(R.id.containerView,new notiFragments()).commit();
}
else if (id == R.id.nav_contacts)
{
FragmentTransaction xfragmentTransaction = mFragmentManager.beginTransaction();
xfragmentTransaction.replace(R.id.containerView,new contactsFragment()).commit();
}
else if (id == R.id.signout)
{
startActivity(new Intent(this,loginActivity.class));
}
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}
Проблема, с которой я сталкиваюсь, заключается в том, что когда я оставляю исходный фрагмент, который является dashFragment, и посещаю другой фрагмент, такой как ProfileFragment, и возвращаюсь обратно к dashFragment, dashFragment отображает пустую страницу вместо отображения моих кнопок и других элементов. Ниже приведен код для моего dashFragment.
public class dashFragment extends Fragment
{
public static TabLayout tabLayout;
public static ViewPager viewPager;
private List<Fragment> fragmentList = new ArrayList<>();
private List<String> titleList = new ArrayList<>();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
View x = inflater.inflate(R.layout.tablayout, null);
tabLayout = (TabLayout) x.findViewById(R.id.tabs);
viewPager = (ViewPager) x.findViewById(R.id.viewpager);
fragmentList = new ArrayList<>();
prepareDataResource();
titleList();
topLevel rta = new topLevel(getFragmentManager(),fragmentList,titleList);
viewPager.setAdapter(rta);
viewPager.setOffscreenPageLimit(10);
tabLayout.setupWithViewPager(viewPager);
setTabIcons();
return x;
}
private void prepareDataResource()
{
fragmentList.add(new homeFragment());
fragmentList.add(new resultsFragment());
}
private void titleList()
{
titleList.add("Home");
titleList.add("Results");
}
private void setTabIcons()
{
tabLayout.getTabAt(0).setIcon(R.drawable.home_tab);
tabLayout.getTabAt(1).setIcon(R.drawable.results_tab);
}
}
Ответ №1:
Вам нужно добавить метод addToBackStack().
то есть
FragmentManager FragmentManager = getSupportFragmentManager(); FragmentManager.beginTransaction().replace(R.id.root_view,новое изменение времени()).addToBackStack(новое изменение времени ().getClass().getName()).commit();
И когда вы загружаете свой первый фрагмент, просто не заменяйте, добавляйте фрагмент для HOME или default.
И чтобы очистить обратный стек, используйте:
public void clearBackStack(){
FragmentManager manager = getSupportFragmentManager();
Log.i("Fragment Count", String.valueOf(manager.getBackStackEntryCount()));
if (manager.getBackStackEntryCount() > 0) {
FragmentManager.BackStackEntry first = manager.getBackStackEntryAt(0);
manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
}