android - OnBackPressedCallback 屏幕旋转后不触发

标签 android

我关注了 ( https://developer.android.com/reference/androidx/activity/OnBackPressedDispatcher )

@Override
public void onAttach(@NonNull final Context context)
{
    super.onAttach(context);
    final OnBackPressedCallback _fragmentOnBackPressedCallback = new OnBackPressedCallback(true)
    {
        @Override
        public void handleOnBackPressed()
        {
            sendData();
        }
    };
    requireActivity().getOnBackPressedDispatcher().addCallback(this, _fragmentOnBackPressedCallback);
}

在 onCreate 的 Activity 中我这样做

final OnBackPressedCallback callback = new OnBackPressedCallback(true)
        {
            @Override
            public void handleOnBackPressed()
            {
                if(getSupportFragmentManager().getBackStackEntryCount() >= 1)
                    getSupportFragmentManager().popBackStack();
                else
                    navigateUpInMenu();
            }
        };
        getOnBackPressedDispatcher().addCallback(this, callback);
}

它工作得很好,但是当我旋转手机时,不会调用 sendData 方法。我错过了什么吗? 我正在使用 androidx.activity:activity:1.1.0

最佳答案

我认为只要 Fragment 的 ViewviewLifecycleOwner 处于 Activity 状态,您就应该注册 OnBackPressedCallback

viewLifeCycleOwner 位于 onCreateViewonDestroyView 之间,因此您不需要取消注册回调来防止由于生命周期而导致任何潜在的内存泄漏 fragment 。

我用

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)

    requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)

}

    val callback = object : OnBackPressedCallback(false) {

        override fun handleOnBackPressed() {
             sendData()
       }
   }

通过回调属性,您还可以根据某些条件或生命周期事件启用或禁用。

override fun onResume() {
    super.onResume()
    callback.isEnabled = true
}

override fun onPause() {
    super.onPause()
    callback.isEnabled = false
}

关于android - OnBackPressedCallback 屏幕旋转后不触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63376684/

相关文章:

android - 渐变背景在某些设备上不起作用

java - Android Oreo+ 中的 AlarmManager 和 BroadcastReceiver

android - 录制时访问输出视频

android - 如何在AppCompat中使用support.v7.preference和潜在的缺点

android - Flutter谷歌地图插件中的getbounds

java - 带有 openfire 的 SSLHandshakeException(本地主机)

java - 调用另一个方法后字符串值null android java

android - 如何以编程方式在 Android 设备中获取设备 (AOSP) 内部版本号?

java - Android Studio Mac Gradle 问题

java - Android ListView 中的多个图标