gpt4 book ai didi

android - 如何在 android fragment 中执行 onBackPress 对话框?

转载 作者:行者123 更新时间:2023-11-29 17:41:52 27 4
gpt4 key购买 nike

我正致力于创建一个弹出对话框以确认用户是否退出页面。

以前我用过这个activity所以没问题。我只需要将对话框放在覆盖 onBackPress 函数中,并在用户选择离开时调用 finish()

但是,目前我想将类切换为 tabhost 内的 fragment 。因此,不仅我需要处理 onbackpress,还需要处理用户单击选项卡栏切换到其他选项卡时的情况。

我试过:

@Override
public void onDetach() {
AlertDialog.Builder builder = new Builder(ctx);
builder.setMessage(getResources().getString(R.string.quit_form));
builder.setNegativeButton(getResources().getString(R.string.yes),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
File directory = new File(Constant.upload_imageFolder);
File[] files = directory.listFiles();
for (int i = 0; i < files.length; ++i) {
files[i].delete();
}
UploadForm.super.onDetach();
}
});
builder.setPositiveButton(getResources().getString(R.string.no),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
builder.create().show();
}

但是它崩溃了。如何解决这个问题?并且 onDetach 是要覆盖的正确函数吗?非常感谢。

更新:ondetach时的异常:

android.support.v4.app.SuperNotCalledException: Fragment UploadForm{42db9eb0 #3 id=0x7f050075} did not call through to super.onDetach()

最佳答案

您需要在 Activity 中覆盖 onBackPressed()。并使所有的 FragmentTransaction 在提交之前都是 addToBackStack。

 @Override public void onBackPressed() {
int count = getFragmentManager().getBackStackEntryCount();

if (count == 0) {
super.onBackPressed();
//additional code
} else {
getFragmentManager().popBackStack();
}
}

虽然上述方法适用于添加到后台堆栈的所有 fragment 。您还可以自定义它以遵循某种模式。

  1. 使用 boolean consumeBackPress();
  2. 方法创建一个接口(interface),例如 BackNavigable(由那些想要消费后退的 fragment 实现)
  3. 对于那些想要使用返回按事件的 fragment ,从实现中返回 true。
  4. 现在在 Activity onBackPressed() 中查看当前 fragment 并检查该 fragment 是否是 BackNavigable 的实例并且在其 consumeBackPress() 实现中返回 true ,如果是则弹出该 fragment 否则调用 super.onBackPressed() Activity 。

就这些。

关于android - 如何在 android fragment 中执行 onBackPress 对话框?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28449399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com