0

私は Android 開発を学んでおり、約 20 個のダイアログ (はい、ボタンなし) を持つアプリの作成を開始しました。はい/いいえを押すとtrueまたはfalseを返すクラスを作成する予定でした。それではクラスはこちら

public class CustomDialog{
Boolean Resp;

public Boolean Confirm(Activity act, String Title, String ConfirmText,
        String CancelBtn, String OkBtn) {
    AlertDialog dialog = new AlertDialog.Builder(act).create();
    dialog.setTitle(Title);
    dialog.setMessage(ConfirmText);
    dialog.setCancelable(false);
    dialog.setButton(DialogInterface.BUTTON_POSITIVE, OkBtn,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int buttonId) {
                     Resp = true;
                }
            });
    dialog.setButton(DialogInterface.BUTTON_NEGATIVE, CancelBtn,
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int buttonId) {
                    Resp = false;
                }
            });

    dialog.setIcon(android.R.drawable.ic_dialog_alert);
    dialog.show();
    if (Resp == null){
        Resp = false;
    }
    return Resp;
}
}

ボタンクリックリスナー内でメインアクティビティからこれを呼び出すと、アプリがクラッシュします。

@Override
public void onClick(View v) {
    if (v.getId() == R.id.Toast){
        CustomDialog tans = new CustomDialog();
        boolean tan = tans.Confirm(MainActivity.this, "Message Title", "Message Text Goes Here", "No", "Yes");
        if (tan){
            Toast.makeText(this, "wow", Toast.LENGTH_LONG).show();
        }
    }
}

修正するにはあなたのアドバイスが必要です。

編集:コードを更新しました。アプリは現在クラッシュしていませんが、[はい]を押してもトーストはありません。

4

1 に答える 1

1

これの代わりに、次のようにMainActivity.thisを試してください。

 Boolean tan = tans.Confirm(MainActivity.this, "Confirmation", "Are you sure?", "No", "Yes");

また、 tans.Confirmメソッドが呼び出されている間にResp変数が初期化されないため、Boolean tan 変数の値がnullであることがもう 1 つあります。Resp値は、ユーザーが [はい] または [いいえ] ボタンをクリックした後にのみ変更されます。

于 2013-08-03T13:19:01.450 に答える