Android 11下toolbar返回按钮与侧滑返回手势执行结果不一致问题
问题原因
- 核心bug出在基类
onOptionsItemSelected的返回逻辑:你已经手动处理了返回按钮的点击事件、调用了onBackPressed,但没有返回true消费该事件,而是继续执行了super.onOptionsItemSelected(item)的默认逻辑。 - 系统原生
onOptionsItemSelected在检测到点击项是android.R.id.home时,会执行默认的向上导航逻辑,该逻辑会直接结束当前Activity,并且会把你在onBackPressed中设置的RESULT_OK重置为默认的RESULT_CANCELED(对应值为0),导致前序页面收到的resultCode不符合预期。 - 侧滑返回手势直接触发
onBackPressed流程,没有额外的系统默认导航逻辑介入,所以设置的返回值可以正常生效。
解决方案
修改基类的onOptionsItemSelected方法,处理完返回按钮点击事件后直接返回true,标记该事件已被消费,不再交给系统处理即可:
override fun onOptionsItemSelected(item: MenuItem): Boolean { // 此处处理返回箭头点击事件 if (item.itemId == android.R.id.home) { onBackPressed() // 调用当前Activity的onBackPressed方法 return true // 新增:消费事件,终止后续系统默认逻辑 } return super.onOptionsItemSelected(item) }
内容的提问来源于stack exchange,提问作者Ethan Allen
相关产品推荐
相关产品推荐

