如何回到上一个片段
how to go back to the previous fragment
我有一个带有 actionViewClass 的搜索按钮。单击此按钮时,将打开一个新片段,我希望在单击后退按钮时返回到上一个片段。
PS: 我正在使用导航图
我的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;
}
});
尝试将片段添加到后台堆栈
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();
}
}
这个问题在这里有很好的答案和解释How to resume Fragment from BackStack if exists
我有一个带有 actionViewClass 的搜索按钮。单击此按钮时,将打开一个新片段,我希望在单击后退按钮时返回到上一个片段。
PS: 我正在使用导航图
我的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;
}
});
尝试将片段添加到后台堆栈
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();
}
}
这个问题在这里有很好的答案和解释How to resume Fragment from BackStack if exists