Android开发:如何从Activity E返回动态调用它的父Activity?
解决Activity E动态返回对应父Activity的问题
你这个场景太常见了——因为父Activity不固定,没法在Manifest里硬编码parentActivityName对吧?其实不用搞复杂配置,Android的任务栈本身就会记录Activity的启动顺序,只要把返回逻辑处理对,就能精准回到启动E的那个父Activity(A/B/C/D中的任意一个)。
补全你的onOptionsItemSelected实现
你只需要把ActionBar返回箭头的逻辑补全,直接调用finish()就好。因为任务栈里已经保存了上一个Activity的实例,finish E之后系统会自动回到栈顶的父Activity:
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 处理ActionBar的返回箭头点击事件 case android.R.id.home: finish(); return true; default: return super.onOptionsItemSelected(item); } }
物理返回键的处理(可选)
其实默认的onBackPressed()逻辑就是finish当前Activity,所以不用额外修改。但如果想自定义返回动画或者做其他操作,也可以重写这个方法:
@Override public void onBackPressed() { finish(); // 要是需要添加页面过渡动画,在这里加就行 // overridePendingTransition(R.anim.slide_in_left, R.anim.slide_out_right); }
启动Activity E的注意点
确保你在A/B/C/D中启动E时,用常规的startActivity(intent)就行,别加FLAG_ACTIVITY_CLEAR_TOP这类会打乱任务栈的Flag。这样任务栈的顺序会是Main -> A -> E(或Main -> B -> E等),finish E之后自然就回到对应的父Activity了。
举个Activity A中启动E的示例代码:
Intent intent = new Intent(A.this, E.class); startActivity(intent);
这样就完全符合你的需求啦,不管从哪个父页面跳过来,E都能正确返回对应的那个Activity。
内容的提问来源于stack exchange,提问作者Marina Ogintz
相关产品推荐
相关产品推荐

