Fragment re-created on bottom navigation view item selected

后端 未结 15 2549
长发绾君心
长发绾君心 2020-12-07 23:55

Following is my code for bottom navigation view item selected

bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationI         


        
15条回答
  •  感情败类
    2020-12-08 00:36

    The best way i found to do it.

    private void replace_fragment(Fragment fragment) {
    
            String tag = fragment.getClass().getSimpleName();
            FragmentTransaction tr = getSupportFragmentManager().beginTransaction();
    
            Fragment curFrag = getSupportFragmentManager().getPrimaryNavigationFragment();
            Fragment cacheFrag = getSupportFragmentManager().findFragmentByTag(tag);
    
            if (curFrag != null)
                tr.hide(curFrag);
    
            if (cacheFrag == null) {
                tr.add(R.id.main_frame, fragment, tag);
            } else {
                tr.show(cacheFrag);
                fragment = cacheFrag;
            }
    
            tr.setPrimaryNavigationFragment(fragment);
            tr.commit();
    
        }
    
    private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
                = new BottomNavigationView.OnNavigationItemSelectedListener() {
    
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    
                switch (item.getItemId()) {
                    case R.id.nav_posts:
                        replace_fragment(new PostsFragment());
                        return true;
                    case R.id.nav_stores:
                        replace_fragment(new StoresFragment());
                        return true;
                    case R.id.nav_chats:
                        replace_fragment(new DiscussionsFragment());
                        return true;
                    case R.id.nav_account:
                        replace_fragment(new ProfileFragment());
                        return true;
                }
                return false;
            }
        };
    

提交回复
热议问题