【问题标题】:AlertDialog not being dismissed.AlertDialog 未被解除。
【发布时间】:2015-08-28 14:17:33
【问题描述】:

我创建了一个用于不同活动的 AlertDialog 片段。由于某种原因,警报不会被解除,并且主要活动中的代码不会继续。我输入了很多日志命令来查看它停止的确切位置。以下是我的警报对话框:

public class Convert_units_dialog extends DialogFragment {
final static String TAG = "TAG_convert_units";

public static Convert_units_dialog newInstance() {
    Convert_units_dialog frag = new Convert_units_dialog();
    Bundle args = new Bundle();
    args.putInt("title", R.string.change_units_dialog);
    frag.setArguments(args);
    return frag;
}


public Dialog onCreateDialog(Bundle savedInstanceState) {
    int title = getArguments().getInt("title");

    return new AlertDialog.Builder(getActivity())
            .setTitle(title)
            .setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.i(TAG, "inside click listener");
                    convert_units();
                    //dismiss dialog here
                    Log.i(TAG, "Start dismiss");
                    dismiss();
                    Log.i(TAG, "End dismiss");
                }
            })
            .setNegativeButton(R.string.dont_convert,null)
            .create();
}

在我的活动中,我创建了一个调用 alertDialog 的函数。

    private void open_alert_dialog() {
    DialogFragment newFragment = Convert_units_dialog.newInstance();
    newFragment.show(getFragmentManager(), "dialog");
    Log.i(TAG,"open_alert_dialog finished");

}

当我运行我的代码时,我在日志中看到“结束关闭”,并且从未看到“open_alert_dialog 完成”,因此我的活动中此命令之后的代码没有运行。有什么明显的我做错了吗?我已经尝试了很多我见过的建议,但到目前为止都没有奏效。

我对一般编程有点陌生,如果有任何意见,我将不胜感激。谢谢。

【问题讨论】:

  • 当您单击“正”按钮时,您的应用程序是否崩溃?您应该在 logcat 崩溃时复制/粘贴它。

标签: android android-alertdialog dismiss


【解决方案1】:

您的代码似乎正确,但请尝试一些方法,看看是否可以解决:

  • 检查 DialogFragmentAlertDialog 的导入,它们在 Activity 和 Convert_units_dialog 上应该相同。 (如果您使用的是 appcompat-v7 库,则会显示其他导入选项)
  • setPositiveButton 上尝试调用 dialog.dismiss(); 而不是 dismiss();

为了给您一个准确的答案,我们需要一些信息,例如:

  • convert_units()的实现是什么;
  • 您在 Activity 的哪个位置调用 open_alert_dialog()

最后,检查一下文档,相信你已经在检查过了,不过还是值得一试再读一遍:http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog

【讨论】:

  • 我想我可能误解了发生了什么。对话框被关闭,但似乎原始活动中的代码没有继续。我认为我的错误是我无法从警报对话框接收信息。当我从文档中实现 doPositiveClick() 方法时,我能够将应该在活动中发生的其余部分放在那里并且它起作用了。
  • 哦,好的,很高兴它起作用了,现在您应该为对话框上的回调创建一个接口,以便任何活动都可以使用它。像这样:developer.android.com/guide/topics/ui/…
【解决方案2】:

更新:

我想我误解了正在发生的事情,并通过文档找到了答案。我添加了对 doPositiveClick() 的方法调用

我的新代码如下所示:

    return new AlertDialog.Builder(getActivity())
            .setTitle(title)
            .setPositiveButton(R.string.convert, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Log.i(TAG, "inside click listener");
                    convert_units();
                    //dismiss dialog here
                    ((Settings)getActivity()).doPositiveClick();
                }
            })
            .setNegativeButton(R.string.dont_convert,null)
            .create();

}

然后我在我的 Activity 中创建了 doPositiveClick() 以及我期望在 alertDialog 被解除后运行的其余代码。

        public void doPositiveClick() {
    // Do stuff here.
    Log.i("FragmentAlertDialog", "Positive click!");
    display_maxes();
}

现在一切正常。

【讨论】:

    猜你喜欢
    • 2011-06-18
    • 2016-10-02
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2018-02-09
    • 2021-12-17
    • 2011-08-06
    • 1970-01-01
    相关资源
    最近更新 更多