У меня есть фрагмент, который сбрасывает и отображает пустую страницу вместо представлений

#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);
    }
}