【问题标题】:How to manage BackPress in fragment more than 10+ time?如何在超过 10 次以上的片段中管理 BackPress?
【发布时间】:2021-05-02 00:06:06
【问题描述】:
我想在片段中管理后台,我知道通过调用 onBackpress 方法来处理活动中的后台。
@Override
public void onBackPressed() {
super.onBackPressed();
}
但我在 Activity 中实现了 Fragment 并对其进行了 10 多次替换,所以每当我按下回键应用程序时都会关闭。
所以我想多次管理片段中的背压。
如果有人知道最佳解决方案,请给出您的答案,我已经尝试了类似问题给出的许多解决方案,但它不起作用。
在此先感谢 :)
【问题讨论】:
标签:
android
android-activity
fragment
onbackpressed
【解决方案1】:
您可以使用这种方式在 Fragment 上处理背压
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (getView() != null) {
getView().setFocusableInTouchMode(true);
getView().requestFocus();
getView().setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int keyCode, KeyEvent keyEvent) {
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN)
if (keyCode == KeyEvent.KEYCODE_BACK)
if (Constants.getInstance().checkIsAudioPlay()) {
stopAudioPlaying();
refreshView();
btnPlayALL.setText(R.string.play_all);
return true;
} else {
return false;
}
return false;
}
});
}
}
【解决方案2】:
在您的活动的onBackPressed() 方法中添加以下内容:
FragmentManager fragmentManager = getSupportFragmentManager();
if (fragmentManager.getFragments().size() > 0) {
fragmentManager.popBackStack();
}else {
super.onBackPressed();
}
另外不要忘记覆盖片段的onPause() 方法并处理您希望片段在按下后退按钮时完成的任务。