Search code examples
javaandroidandroid-fragmentsandroid-navigation-graph

how to go back to the previous fragment


I have a search button, with an actionViewClass. When this button is clicked a new fragment opens, and I want when the back button is clicked to go back to the previous fragment.

PS: I am using navigation graph

My toolbar_menu.xml

 <item
        android:id="@+id/search"
        android:title="Pesquisar"
        android:orderInCategory="103"
        android:icon="@drawable/ic_search"
        android:iconTint="@color/colorPrimary"
        app:showAsAction="ifRoom|collapseActionView"
        app:actionViewClass="androidx.appcompat.widget.SearchView"/>

MainActivity.java

toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
               switch (item.getItemId()){
                   case R.id.search:
                       getSupportFragmentManager().beginTransaction()
                               .replace(R.id.navHostFragment, new ContaFragment())
                               .commit();
                       break;
               }
                return false;
            }
        });

Solution

  • try adding the fragment to backstack

    private void replaceFragment (Fragment fragment){
    String backStateName = fragment.getClass().getName();
    
    FragmentManager manager = getSupportFragmentManager();
    boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);
    
    if (!fragmentPopped){ //fragment not in back stack, create it.
    FragmentTransaction ft = manager.beginTransaction();
    ft.replace(R.id.navHostFragment, fragment);
    ft.addToBackStack(backStateName);
    ft.commit();
     }
    }
    

    this question has a good answer and explanation here How to resume Fragment from BackStack if exists