384

はい、AlertDialog.Builder があることは知っていますが、Android でダイアログを表示するのがどれほど難しいか (少なくとも、プログラマーにとって使いやすいものではない) を知ってショックを受けました。

私は以前 .NET 開発者でしたが、次のような Android に相当するものはあるのでしょうか?

if (MessageBox.Show("Sure?", "", MessageBoxButtons.YesNo) == DialogResult.Yes){
    // Do something...
}
4

17 に答える 17

775

AlertDialog.Builder の使い方はそれほど難しくありません。確かに最初は少し戸惑いますが、少し使ってみるとシンプルでパワフルです。使い方はわかっているとおっしゃっていましたが、とにかく簡単な例を次に示します。

DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which){
        case DialogInterface.BUTTON_POSITIVE:
            //Yes button clicked
            break;

        case DialogInterface.BUTTON_NEGATIVE:
            //No button clicked
            break;
        }
    }
};

AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
    .setNegativeButton("No", dialogClickListener).show();

同じことを行う必要があるDialogInterface.OnClickListener他のyes/noボックスがある場合は、それを再利用することもできます。

内からダイアログを作成している場合はView.OnClickListener、 を使用view.getContext()してコンテキストを取得できます。または、 を使用することもできますyourFragmentName.getActivity()

于 2010-03-19T15:50:24.290 に答える
175

これを試して:

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Confirm");
builder.setMessage("Are you sure?");

builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        // Do nothing but close the dialog

        dialog.dismiss();
    }
});

builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {

        // Do nothing
        dialog.dismiss();
    }
});

AlertDialog alert = builder.create();
alert.show();
于 2012-08-31T10:29:56.987 に答える
34

Steve H の答えは的を射ていますが、もう少し情報があります。ダイアログがそのように機能する理由は、Android のダイアログが非同期であるためです (ダイアログが表示されても実行は停止しません)。このため、コールバックを使用してユーザーの選択を処理する必要があります。

Android と .NET の違いに関するより長い議論については、この質問を確認してください (ダイアログに関連するため): ダイアログ / AlertDialogs: ダイアログがアップしている間に「実行をブロックする」方法 (.NET スタイル)

于 2010-03-19T17:16:21.677 に答える
8

ダイアログに電話するかどうかを人に尋ねる..

import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;
import android.widget.Toast;

public class Firstclass extends Activity {

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

        ImageView imageViewCall = (ImageView) findViewById(R.id.ring_mig);

        imageViewCall.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v){
                try{
                    showDialog("0728570527");
                } catch (Exception e){
                    e.printStackTrace();
                }                   
            }    
        });    
    }

    public void showDialog(final String phone) throws Exception {
        AlertDialog.Builder builder = new AlertDialog.Builder(Firstclass.this);

        builder.setMessage("Ring: " + phone);       

        builder.setPositiveButton("Ring", new DialogInterface.OnClickListener(){
            @Override
            public void onClick(DialogInterface dialog, int which){

                Intent callIntent = new Intent(Intent.ACTION_DIAL);// (Intent.ACTION_CALL);                 
                callIntent.setData(Uri.parse("tel:" + phone));
                startActivity(callIntent);

                dialog.dismiss();
            }
        });

        builder.setNegativeButton("Abort", new DialogInterface.OnClickListener(){   
            @Override
            public void onClick(DialogInterface dialog, int which){
                dialog.dismiss();
            }
        });         
        builder.show();
    }    
}
于 2014-04-22T06:40:14.707 に答える
5

ニッキに感謝します。あなたの答えは、次のように目的のアクションを追加するだけで、既存のものを改善するのに役立ちました

AlertDialog.Builder builder = new AlertDialog.Builder(this);

builder.setTitle("Do this action");
builder.setMessage("do you want confirm this action?");

builder.setPositiveButton("YES", new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        // Do do my action here

        dialog.dismiss();
    }

});

builder.setNegativeButton("NO", new DialogInterface.OnClickListener() {

    @Override
    public void onClick(DialogInterface dialog, int which) {
        // I do not need any action here you might
        dialog.dismiss();
    }
});

AlertDialog alert = builder.create();
alert.show();
于 2012-11-11T05:38:23.500 に答える
5

スティーブの答えは正しいですが、断片で時代遅れです。FragmentDialog を使用した例を次に示します。

クラス:

public class SomeDialog extends DialogFragment {

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new AlertDialog.Builder(getActivity())
            .setTitle("Title")
            .setMessage("Sure you wanna do this!")
            .setNegativeButton(android.R.string.no, new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // do nothing (will close dialog)
                }
            })
            .setPositiveButton(android.R.string.yes,  new OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    // do something
                }
            })
            .create();
    }
}

ダイアログを開始するには:

            FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
            // Create and show the dialog.
            SomeDialog newFragment = new SomeDialog ();
            newFragment.show(ft, "dialog");

onClickListener組み込みリスナーの代わりに、クラスにそれを実装して使用させることもできます。

于 2013-04-23T16:52:37.823 に答える
1

ありがとう。API レベル 2 (Android 1.1) を使用し、 and の代わりにBUTTON_POSITIVEandBUTTON_NEGATIVEを使用する必要がBUTTON1ありBUTTON2ます。

于 2011-01-27T06:18:46.187 に答える
1

1.アラートダイアログセットメッセージ、タイトル、ポジティブ、ネガティブボタンを作成します。

final AlertDialog alertDialog = new AlertDialog.Builder(this)
                        .setCancelable(false)
                        .setTitle("Confirmation")
                        .setMessage("Do you want to remove this Picture?")
                        .setPositiveButton("Yes",null)
                        .setNegativeButton("No",null)
                        .create();

2. DialogInterface Click で両方のボタンを見つけてから、setOnClickListener():

alertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
            @Override
            public void onShow(DialogInterface dialogInterface) {
                Button yesButton = (alertDialog).getButton(android.app.AlertDialog.BUTTON_POSITIVE);
                Button noButton = (alertDialog).getButton(android.app.AlertDialog.BUTTON_NEGATIVE);
                yesButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        //Now Background Class To Update Operator State
                        alertDialog.dismiss();
                        Toast.makeText(GroundEditActivity.this, "Click on Yes", Toast.LENGTH_SHORT).show();
                        //Do Something here 
                    }
                });

                noButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        alertDialog.dismiss();
                        Toast.makeText(GroundEditActivity.this, "Click on No", Toast.LENGTH_SHORT).show();
                        //Do Some Thing Here 
                    }
                });
            }
        });

3.アラートダイアログを表示するには:

alertDialog.show();

注: AlertDialog での Final キーワードを忘れないでください。

于 2018-02-01T06:39:26.857 に答える
0

Kotlin ではとても簡単にできます。

 alert("Testing alerts") {
    title = "Alert"
    yesButton { toast("Yess!!!") }
    noButton { }
}.show()
于 2018-05-17T14:10:16.730 に答える