0

大家好,看看下面的代码......我在我的应用程序中使用了进度条,但是当我使用 dialog.dismiss() 时它没有显示,但如果我不使用这个方法会显示,但问题是它不会消失....任何帮助家伙...?

 AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setMessage("Are you sure you want to delete?")
                        .setCancelable(false)
                        .setPositiveButton("Yes",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int id) {
                                        `ProgressDialog` dialog1 = ProgressDialog.show(context, "", "Deleting...",true);
                                        // Log.v("", "You Clicked " + s);

                                        dba.delete("messages", "private = 0 and _id=?",
                                                new String[] { s });
                                        dba.close();
                                        populate();

                                    }
                                })
                        .setNegativeButton("No",
                                new DialogInterface.OnClickListener() {
                                    public void onClick(DialogInterface dialog,
                                            int id) {
                                        dialog.cancel();
                                    }
                                });

                AlertDialog alert = builder.create();
                alert.show();
                dialog1.dismiss();
4

1 回答 1

1

我要清理的几件事:

DialogInterface.OnClickListener clickListener = new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int id) {
        switch(id){
        case DialogInterface.BUTTON_POSITIVE:

            ProgressDialog waitDialog = ProgressDialog.show(context, "", "Deleting...",true);
            dba.delete("messages", "private = 0 and _id=?", new String[] { s }) > 0);
            dba.close();

            waitDialog.dismiss();

            populate();

            break;
        case DialogInterface.BUTTON_NEGATIVE:
            dialog.dismiss();
            break;
        }
}

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage("Are you sure you want to delete?")
       .setCancelable(false)
       .setPositiveButton("Yes", clickListener)
       .setNegativeButton("No", clickListener);

AlertDialog alert = builder.create();
alert.show();

我很困惑为什么你会打电话alert.show()并立即打电话dialog.dismiss()dialog直到你点击对话框中的 POSITIVE 按钮才会显示。

现在,我现在不记得 SQLite 调用是否阻塞,通过执行删除操作,然后立即关闭对话框,它应该以正确的顺序完成。我还没喝咖啡;)

但是请记住,SQLite 调用通常不会花费太长时间,因此如果要从数据库中删除一行,ProgressDialog 将闪烁并关闭。如果操作花费的时间超过 300 毫秒,您可能希望实现一个 Timer 来显示进度。

此外,通过创建一个新的OnClickListener而不是使用匿名内部类,事情变得清晰并变得更加可重用。

这一行: dialog.cancel(); 很有趣,因为您已将对话框设置为不可取消。dismiss()和之间的区别在于cancel()调用cancel()触发了您没有设置的OnCancelListener 。

于 2012-04-25T19:43:09.730 回答