如何让Appbar返回按钮回到上一个Fragment而非Home Activity
解决方案
问题出在Appbar返回按钮的默认逻辑:当你在Manifest中设置了parentActivityName后,系统会默认让Appbar的返回按钮直接跳转到父Activity,不会自动处理Fragment的回退栈。要解决这个问题,需要在MenusActivity中重写返回按钮的点击逻辑:
- 重写
onOptionsItemSelected方法,拦截Home按钮的点击事件 - 先检查Fragment回退栈是否有内容,有则弹出回退栈回到上一个Fragment;没有则执行默认的返回父Activity逻辑
具体代码如下:
@Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == android.R.id.home) { // 判断Fragment回退栈是否存在未处理的返回条目 if (getSupportFragmentManager().getBackStackEntryCount() > 0) { // 弹出回退栈,回到MenusFragment getSupportFragmentManager().popBackStack(); return true; // 拦截默认逻辑 } } // 回退栈为空时,执行默认的返回父Activity操作 return super.onOptionsItemSelected(item); }
另外请确认你替换Fragment的代码确实正确调用了addToBackStack(null),示例代码如下:
// 在MenusFragment中替换为WebViewFragment的代码 getFragmentManager() .beginTransaction() .replace(R.id.your_fragment_container_id, new WebViewFragment()) .addToBackStack(null) .commit();
这样修改后,当WebViewFragment显示时,点击Appbar返回按钮会先回到MenusFragment,再次点击才会回到HomeActivity,和虚拟返回键的逻辑保持一致。
内容的提问来源于stack exchange,提问作者dans
相关产品推荐
相关产品推荐

