0

ダイアログ:

public class ClearDialog extends Dialog {

    private MainActivity context;

    public ClearDialog(MainActivity context) {
        super(context);
        this.context = context;
        setContentView(R.layout.clear_dialog);
        setTitle("something");
        setCanceledOnTouchOutside(false);
        setCancelable(true);
    }
    /* not overriding anymore
    @Override
    public void onBackPressed() {
        return;
    }
    still doesnt work */

    @Override
    protected void onStart() {
        super.onStart();
        SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(context);
        SharedPreferences.Editor editor = preferences.edit();
        editor.clear();
        editor.commit();
        ResourceHelpers.removeAllResources();
        context.onResourcesDeleted();
    }

}

アクティビティ:

@Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case R.id.itemLogoff:
            loginDialog.show(); //this is another dialog
            break;
        case R.id.itemSync:
            Intent syncer = new Intent(MainActivity.this, SyncActivity.class);
            MainActivity.this.startActivity(syncer);
            break;
        case R.id.itemClear:
            new AlertDialog.Builder(this)
            .setIcon(R.drawable.ic_action_alert)
            .setTitle("something")
            .setMessage("something")
            .setPositiveButton("something", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    showDeleteDialog();
                }
            })
            .setNegativeButton("something", null)
            .show();
            break;
        }
        return true;
    }

    private void showDeleteDialog() {
        cd = new ClearDialog(this); //this is the dialog
        cd.show();
    }

    public void onResourcesDeleted() {

        cd.dismiss();
        loginDialog.show();
    }

だから..ユーザーは、アクションバー(オプションメニュー)から「すべてのデータを削除」をクリックします。AlertDialog を開いて、確信があるかどうかを尋ねます。次に、彼が確信している場合は、回転するProgressBar.

問題: 却下されない!

loginDialog (すべてのデータが失われるため、ユーザーに再度ログインしてもらいたい...) がバックグラウンドで表示されます。ClearDialog は閉じません...

4

3 に答える 3

1

問題はここにあると思います(この方法でメソッドをオーバーライドしないでください):

@Override
    public void onBackPressed() {
        return;
    }

.setCancelable(false) ですでにモーダル ダイアログを取得できます。

このドキュメントをご覧ください: http://developer.android.com/guide/topics/ui/dialogs.html#AlertDialog

于 2012-08-14T13:08:12.053 に答える
0

ダイアログに次のプロパティを指定します。setCancelable(true);

コード内の .setTitle() または .setMessage と同じように....

于 2012-08-14T13:17:03.103 に答える
0

従うべきStErMiの回答に加えて、 onResourcesDeleted() メソッドの2行も切り替えます。ログイン ダイアログが呼び出され、却下が呼び出される前に引き継ぎます。

public void onResourcesDeleted() {
    cd.dismiss();
    loginDialog.show();
}
于 2012-08-14T13:24:09.753 に答える