2017年1月11日水曜日

Android ダイアログの使い方

目次へ



Androidでダイアログを作成する方法をまとめておきます。
ここで使うダイアログはすべてAlertDialogクラスを使い次のようなものを表示します。

  • メッセージを表示するだけのダイアログ
  • ボタンがあり、ユーザがボタンをタップし答えることのできるダイアログ
  • 複数の項目から選択をするダイアログ
  • ラジオボタンとボタンを表示するするダイアログ
  • チェックボックスとボタンを表示するするダイアログ




■■■■ダイアログを表示するためのボタンを作っておく



最初に5種類のダイアログを表示するためのボタンを作り、btn1~btn5の名前で使えるようにしておきます。
ボタンの作り方はこちら、あるいは、こちらなどで検索してください。

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Button btn1 = (Button)this.findViewById(R.id.button1);
        Button btn2 = (Button)this.findViewById(R.id.button2);
        Button btn3 = (Button)this.findViewById(R.id.button3);
        Button btn4 = (Button)this.findViewById(R.id.button4);
        Button btn5 = (Button)this.findViewById(R.id.button5);
    この下に、次から示すボタンのリスナを書く




■■■■メッセージを表示するだけのダイアログ



btn1をタップされた時の処理としてメッセージを表示するだけのダイアログを出すのが下のコードです。
この中の①のMainActivity.thisはActivityのインスタンスです。
OnClickListenerの中で使っているために、thisではなく、自分のクラス名.thisとしています。

if (btn1 != null) {
    btn1.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);①
            builder.setTitle("タイトル");
            builder.setMessage("AlertDialogです");
            builder.show();
        }
    });
}



■■■■ボタンで答えるダイアログ



btn2をタップされた時の処理として上のようなダイアログを出すのが下のコードです。

ダイアログの中のボタンは、必要なものだけ、作成すればよいので、OKだけならbuilder.setPositiveButtonメソッドだけを呼び出せばよいことになります。

if (btn2 != null) {
    btn2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("タイトル");
            builder.setMessage("ボタンのあるAlertDialogです");
            //3つのボタンのうち必要なボタンだけ作成すればよい
            builder.setPositiveButton("はい", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast toast = Toast.makeText(MainActivity.this, "OK", Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.setNegativeButton("いいえ", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast toast = Toast.makeText(MainActivity.this, "NO", Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.setNeutralButton("またね", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast toast=Toast.makeText(MainActivity.this,"またね",Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.show();
        }
    });
}




■■■■複数の項目から選択をするダイアログ



btn3をタップされた時の処理として上のような複数の項目から選択をするダイアログを出すのが下のコードです。

このとき、選択肢の文字列はフィールドで定義しておきます。

   String[] ss = {"選択1", "選択2", "選択3"};
    int selectedItem = 0;
    boolean[] selectedItems = {false, false, false};

if (btn3 != null) {
    btn3.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("選択してください");
            builder.setItems((CharSequence[]) ss, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int k) {
                    Toast toast=Toast.makeText(MainActivity.this,ss[k],Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.show();
        }
    });
}




■■■■ラジオボタンとボタンを表示するするダイアログ



btn4をタップされた時の処理として上のようなダイアログを出すのが下のコードです。
このとき、複数の項目から選択をするダイアログの時と同じようにフィールドで選択肢の文字列を定義しておきます。また、ラジオボタンを押したときにその番号を入れておくためのselectedItemもフィールドで定義しておきます。

   String[] ss = {"選択1", "選択2", "選択3"};
    int selectedItem = 0;


if (btn4 != null) {
    btn4.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("選択してからOKボタンを押してください");
            builder.setSingleChoiceItems((CharSequence[]) ss, 0, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    selectedItem = which;
                    Toast toast = Toast.makeText(MainActivity.this, ss[which], Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    Toast toast = Toast.makeText(MainActivity.this, ss[selectedItem], Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.show();
        }
    });
}



■■■■チェックボックスとボタンを表示するするダイアログ



btn5をタップされた時の処理として上のようなダイアログを出すのが下のコードです。
このとき、フィールドで選択肢の文字列と、どこにチェックが入っているかを示すbooleanの配列が必要です。
   String[] ss = {"選択1", "選択2", "選択3"};
   boolean[] selectedItems = {false, false, false};


    btn5.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
            builder.setTitle("選択してからOKボタンを押してください");
            builder.setMultiChoiceItems((CharSequence [])ss, selectedItems, 
                                 new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int k, boolean isChecked) {
                    selectedItems[which] = isChecked;
                    Toast toast = Toast.makeText(MainActivity.this, ss[k], Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    String s = "選択されているのは";
                    for(int i=0; i<3; i++) {
                        if(selectedItems[i]) {
                            s += ss[i]+" ";
                        }
                    }
                    Toast toast = Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT);
                    toast.show();
                }
            });
            builder.show();
        }
    });
}



にほんブログ村 IT技術ブログ IT技術メモへ
にほんブログ村

0 件のコメント:

コメントを投稿