Android技术栈(一)从Activity迁移到Fragment(1)

android.useAndroidX=true

android.enableJetifier=tru

为了消除这些难看的红线,你可以直接将新的Fragment使用这种方式强制转换成原有的Fragment

TextureSupportMapFragment mapFragment = TextureSupportMapFragment
.class.cast(getChildFragmentManager()
.findFragmentById(R.id.map_view));

同理,也可以将旧的Fragment强制类型转换成新的Fragment.

Fragment f = Fragment.class.cast(mapFragment);

(注:上面的TextureSupportMapFragment是一个典型案例,他是高德地图SDK中的Fragment,本身已经继承了v4包下的Fragment,可以用过上面的转换来使他兼容AndroidX

差点扯远了,搞定AndroidX后,我们就可以使用FragmentActivityaddOnBackPressedCallback方法为你的Fragment提供拦截OnBackPressed的功能了.

public void addOnBackPressedCallback(@NonNull LifecycleOwner owner,
@NonNull OnBackPressedCallback onBackPressedCallback)

OnBackPressedCallback#handleOnBackPressed需要返回一个boolean值。如果你在这个回调里拦截了onBackPressed应该返回true,说明你自己已经处理了本次返回键按下的操作,这样你的Fragment就不会被弹出返回栈了。

值得注意的是,这个函数的第一个参数,一个LifecycleOwner,ActivityFragment都是LifecycleOwner,用于提供组件的生命周期,这个参数可以帮我们自动管理OnBackPressedCallback回调,你无需手动将他从Activity中移除,在LifecycleOwnerON_DESTROY事件来到的时候,他会被自动移除列表,你无需担心内存泄漏,框架会帮你完成这些事情。

/**

  • Interface for handling {@link ComponentActivity#onBackPressed()} callbacks without
  • strongly coupling that implementation to a subclass of {@link ComponentActivity}.
  • @see ComponentActivity#addOnBackPressedCallback(LifecycleOwner, OnBackPressedCallback)
  • @see ComponentActivity#removeOnBackPressedCallback(OnBackPressedCallback)
    /
    public interface OnBackP
  • 27
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值