是否有一种方法,我们可以实现onBackPressed()在Android片段类似的方式,我们实现在Android活动?

因为Fragment的生命周期没有onBackPressed()。在android3.0片段中是否有其他替代方法来覆盖onBackPressed() ?


当前回答

这只是一个小代码,可以做到这一点:

 getActivity().onBackPressed();

希望它能帮助到别人:)

其他回答

我使用的另一种方法如下:

一个Otto事件总线,用于在活动及其片段之间进行通信 Activity中的堆栈,包含在调用片段定义的Runnable中包装的自定义后退操作 当onBackPressed在控制Activity中被调用时,它弹出最近的自定义后退动作并执行它的Runnable。如果Stack上没有任何东西,则会调用默认的super.onBackPressed()

这里包含了完整的方法和示例代码,作为对另一个SO问题的回答。

如何使用onDestroyView()?

@Override
public void onDestroyView() {
    super.onDestroyView();
}
@Override
public void onResume() {
    super.onResume();

    getView().setFocusableInTouchMode(true);
    getView().requestFocus();
    getView().setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {
                // handle back button
                replaceFragmentToBackStack(getActivity(), WelcomeFragment.newInstance(bundle), tags);

                return true;
            }

            return false;
        }
    });
}

这一行代码将从任何片段中进行操作,它将弹出backstack上的当前片段。

getActivity().getSupportFragmentManager().popBackStack();

根据AndroidX发布说明,AndroidX。活动1.0.0-alpha01发布并引入了ComponentActivity,一个现有FragmentActivity和AppCompatActivity的新基类。这个版本给我们带来了一个新功能:

你现在可以通过addOnBackPressedCallback注册一个OnBackPressedCallback来接收onBackPressed()回调,而不需要在你的活动中覆盖这个方法。