首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何暂停代码以获取来自AlertDialog的结果

在Android开发中,可以通过AlertDialog来显示一个对话框,并获取用户的选择结果。为了暂停代码以获取来自AlertDialog的结果,可以使用回调函数或者使用异步操作。

  1. 使用回调函数:
    • 创建一个接口,定义一个回调方法,用于接收AlertDialog的结果。
    • 在需要弹出AlertDialog的地方,创建一个AlertDialog,并设置按钮的点击事件。
    • 在点击事件中,调用回调方法,并传递AlertDialog的结果。
    • 在回调方法中,处理AlertDialog的结果。
    • 示例代码如下:
代码语言:txt
复制
public interface AlertDialogListener {
    void onResult(boolean result);
}

public class MainActivity extends AppCompatActivity implements AlertDialogListener {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 弹出AlertDialog
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("提示");
        builder.setMessage("是否继续操作?");
        builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 调用回调方法,传递结果为true
                onResult(true);
            }
        });
        builder.setNegativeButton("否", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                // 调用回调方法,传递结果为false
                onResult(false);
            }
        });
        builder.show();
    }

    @Override
    public void onResult(boolean result) {
        // 处理AlertDialog的结果
        if (result) {
            // 用户选择了"是"
            // 继续操作
        } else {
            // 用户选择了"否"
            // 取消操作
        }
    }
}
  1. 使用异步操作:
    • 创建一个异步任务(AsyncTask)来执行AlertDialog的显示和结果获取操作。
    • 在异步任务的后台线程中,创建一个AlertDialog,并设置按钮的点击事件。
    • 在点击事件中,通过回调或者通过AsyncTask的结果传递机制,将AlertDialog的结果传递给主线程。
    • 在主线程中,处理AlertDialog的结果。
    • 示例代码如下:
代码语言:txt
复制
public class MainActivity extends AppCompatActivity {

    private AlertDialogListener listener;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 创建AlertDialogListener
        listener = new AlertDialogListener() {
            @Override
            public void onResult(boolean result) {
                // 处理AlertDialog的结果
                if (result) {
                    // 用户选择了"是"
                    // 继续操作
                } else {
                    // 用户选择了"否"
                    // 取消操作
                }
            }
        };

        // 执行异步任务
        new AlertDialogTask().execute();
    }

    private class AlertDialogTask extends AsyncTask<Void, Void, Boolean> {

        @Override
        protected Boolean doInBackground(Void... voids) {
            // 在后台线程中执行AlertDialog的显示和结果获取操作
            final boolean[] result = new boolean[1];

            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    // 弹出AlertDialog
                    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
                    builder.setTitle("提示");
                    builder.setMessage("是否继续操作?");
                    builder.setPositiveButton("是", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 设置结果为true
                            result[0] = true;
                        }
                    });
                    builder.setNegativeButton("否", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            // 设置结果为false
                            result[0] = false;
                        }
                    });
                    builder.show();
                }
            });

            // 等待AlertDialog的结果
            while (result[0] == null) {
                try {
                    Thread.sleep(100);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

            return result[0];
        }

        @Override
        protected void onPostExecute(Boolean result) {
            // 将AlertDialog的结果传递给主线程
            listener.onResult(result);
        }
    }
}

以上是两种获取来自AlertDialog结果的方法,可以根据具体需求选择适合的方式。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Android开发笔记(七十一)区分开发模式和上线模式

    许多开发者(包括博主在内)都是闷骚的程序员,为了开发调试方便,常常在代码里加上日志,还经常在页面上各种弹窗提示。这固然有利于发现bug、提高软件质量,但过多的调试信息往往容易泄露敏感信息,如用户的账号密码、业务流程的逻辑。所以从保密需要考虑,app在上线前都得去掉多余的调试信息,也就形成了上线模式。 建立上线模式的好处有: 1、保护用户的敏感账户信息不被泄露; 2、保护业务逻辑与流程处理信息不被泄露; 3、把异常信息转换为更友好的提示信息,改善用户体验; 上线模式不是简单的把调试代码删掉,而是通过某个开关来控制是否显示调试信息,因为app后续还得修改、更新、重新发布,这个迭代的过程也要不断调试来实现新功能。具体地说,就是建立几个公共类,代码中涉及到输入调试信息的地方,都改为调用公共类的方法;然后在公共类定义几个布尔变量作为开关,在开发时打开调试,在上线时关闭调试,如此便实现了开发模式和上线模式的切换。

    02

    Android开发笔记(六十六)自定义对话框

    Android中最常用的对话框是AlertDialog,它可以完成常见的交互操作,如提示、确认、选择等等,然后就是进度对话框ProgressDialog(参见《Android开发笔记(四十九)异步任务处理AsyncTask》)。 AlertDialog没有公开的构造函数,必须借助于AlertDialog.Builder才能完成参数设置。Builder的常用方法如下: setIcon : 设置标题的图标。 setTitle : 设置标题的文本。 setCustomTitle : 设置自定义的标题视图。 --以上方法用于设置标题部分。注意setTitle和setCustomTitle只能设置其一,不能重复设置。 setMessage : 设置内容的文本。 setView : 设置自定义的内容视图。 setAdapter : 设置List方式的内容视图。使用较麻烦,一般不用。 setItems : 设置Spinner方式的内容视图。窗口显示与对话框模式的Spinner极为相似,没有底部的按钮,一旦选中某项就立即关闭对话框。 setSingleChoiceItems : 设置单选列表的内容视图。与setItems的区别在于有显示底部的交互按钮,并且每项右边有单选按钮。 setMultiChoiceItems : 设置多选列表的内容视图。底部有交互按钮,并且每项右边有复选按钮。 --以上方法用于设置内容部分。注意这些方法互相冲突,同时只能设置其一。 setPositiveButton : 设置肯定按钮的信息,如文本、点击监听器。 setNegativeButton : 设置否定按钮的信息,如文本、点击监听器。 setNeutralButton : 设置中性按钮的信息,如文本、点击监听器。 --以上方法用于设置交互按钮。 通过Builder设置完参数,还需调用create方法才能生成AlertDialog对象。不过要想在页面上显示AlertDialog,还得调用该对象的show方法。

    02

    Android开发笔记(二十三)文件对话框FileDialog

    对话框是人机交互的有力工具,Android自带了几个常用的对话框,包括AlertDialog提示对话框、ProgressDialog进度对话框、DatePickerDialog日期选择对话框、TimePickerDialog时间选择对话框等等。其中最常用的是AlertDialog,而且需要自定义对话框的时候,多半也是在AlertDialog.Builder基础上集成其他的控件,具体参见《Android开发笔记(六十六)自定义对话框》。ProgressDialog也比较常用,在系统加载信息或者等待其他事情时,都可能需要显示ProgressDialog。相比之下,DatePickerDialog和TimePickerDialog用的不多,因为这两个对话框上的文字依赖于系统的语言设置,如果系统默认语言是英文,DatePickerDialog和TimePickerDialog上的文字也是英文,而且还无法设置为中文;另一个原因是这两个对话框的布局和风格无法自定义,如果想加上别的提示信息,就得自己重写代码了。接下来我们就使用AlertDialog来重写日期和时间对话框。 首先要提供日期对话框和时间对话框的布局文件,例如R.layout.dialog_format_date和R.layout.dialog_format_time,布局文件中需分别集成DatePicker和TimePicker控件。 然后分别初始化DatePicker和TimePicker对象,分别设置当前日期与当前时间。 接着创建一个AlertDialog.Builder对象,在该Builder对象中嵌入布局视图,并设置标题、确定按钮、取消按钮。 最后还要提供一个回调接口,用于主页面上处理日期和时间的选择事件,同时在确定按钮的点击事件中要触发该回调接口的方法。 下面是重写后的日期和时间对话框的代码

    03
    领券