1

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;
            }
        });
Fabio Ramos
  • 33
  • 2
  • 8

1 Answers1

0

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

Bilal Rammal
  • 814
  • 8
  • 14