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

さて、SQLiteの呼び出しがブロックされているかどうかを今のところ思い出せません。削除操作を実行し、直後にダイアログを閉じると、正しい順序で実行されるはずです。私はまだコーヒーを飲んでいません;)

ただし、SQLiteの呼び出しは通常それほど長くはかからないため、データベースから1つの行を削除すると、ProgressDialogが点滅します。操作に300ミリ秒以上かかる場合は、タイマーを実装して進行状況を表示することをお勧めします。

また、匿名の内部クラスを使用する代わりに新しいクラスを作成することによりOnClickListener、物事が明確になり、より再利用可能になります。

この行:dialog.cancel(); ダイアログをキャンセルできないように設定しただけでなく、興味深いものです。dismiss()との違いcancel()は、呼び出しによって、設定していないOnCancelListenercancel()がトリガーされることです。

于 2012-04-25T19:43:09.730 に答える