今天逛Android官方文档的时候发现了一个比较简单也有点意思的东西。自定义返回导航。这篇文章就这个简单说一下:
自定义返回导航是啥;
怎么用;
简单场景;
看一下源码;
什么是自定义返回导航
简单点来说就是可以对返回进行拦截了。有人就会说了:之前也可以拦截呀!!
对,以前对后退做拦截的的方式基本上是对onKeyDown
方法做拦截(也可以对onBackPressed
做拦截),但onKeyDown
职能比较多,包含了很多物理按键,现在android官方将返回拿出来单独处理肯定会好一点的(原理就是对onBackPressed
做拦截)。
是这样的
通过activity的getOnBackPressedDispatcher()
方法你可以得到一个OnBackPressedDispatcher
,看名字就知道,这是用来调度返回用的,而我们可以通过它的addCallback
方法将我们想要的返回逻辑加给他,就像这样:
val callback = onBackPressedDispatcher.addCallback(this,true){
//back code
}
这是kotlin对addCallback
优化的一个扩展函数,如果是java的话,是这样的:
OnBackPressedCallback callback = new OnBackPressedCallback(true) {//true 开启自定义返回逻辑
@Override
public void handleOnBackPressed() {
//back code
}
};
getOnBackPressedDispatcher().addCallback(callback);
然后我们可以通过callback的setEnabled
方法对这个自定义返回逻辑开启和关闭。callback.setEnabled(false);
关闭返回拦截,最主要的功能就这么多。
一个实现场景
我使用自定义返回导航改了一下之前写的后退提示,通常在退出最后一个activity的时候提醒一下用户:再点击就退出这个app啦
这样的需求。改后对比了一下简洁了好多(也因为是kotlin):
fun AppCompatActivity.