Activity回退到首页的主界面
最近项目中有个这样的场景A Activity (是Fragment) ->进入 B Activity ->进入 C Activity ->进入 D Activity中,在D Activity中有个按钮点击直接回到首页。但是首页是TabLayout + Fragment+ ViewPage做的。如果直接 startActivity(…,MainActivity::class.java),会出现一些意想不到的问题,比如处理 TabLayout 选中的那是项。参考了https://blog.youkuaiyun.com/xuwei_net/article/details/81367243 的实现方式,根据我自己的需求进行了调整。
我最终解决方案是:首页进入有两个入口,在工具类中定义一个全局变量,从哪里进入标记一下 var currencyFlag=0 ,到D Activity中点击回到首页时根据currencyFlag来判断跳到首页的上一个B_xxActivity 如一下代码:
fun backPressed() {
val intent = Intent()
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP
if (currencyFlag == 0) {
intent.setClass(this, B_1Activity::class.java)
} else if (currencyFlag == 1) {
intent.setClass(this, B_2Activity:class.java)
}
intent.putExtra("flag",10)
startActivity(intent)
this@DActivity.finish()
}
Intent.FLAG_ACTIVITY_CLEAR_TOP这个的意思就是B_1Activity栈中把它前面的Activity全部踢出栈,重新创建一个B_1Activity。
跳到B_1Activity时 根据 flag 判断进行finish:
if (intent.getIntExtra("flag", 0) == 10) {
this.finish()
}
方法有笨但这样比较好处里
参考资料:
https://blog.youkuaiyun.com/xuwei_net/article/details/81367243.
https://mrfzh.github.io/2019/09/15/Activity-%E7%9A%84%E5%90%AF%E5%8A%A8%EF%BC%9A%E5%9B%9B%E7%A7%8D%E5%90%AF%E5%8A%A8%E6%A8%A1%E5%BC%8F%E5%8F%8A%E5%90%84%E7%A7%8D-FLAG/