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