【Android】ダイアログ表示 ~ 基本編 / リスト選択 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2013/10/14/002656
https://dk521123.hatenablog.com/entry/2013/10/05/214058
https://dk521123.hatenablog.com/entry/2013/10/06/122942

の続き。
今回は、リスト選択のダイアログを表示する。

目次

【1】サンプル
【2】トラブルシューティング

【1】サンプル

Kotlin

button.setOnClickListener {
    val targetList = arrayOf("One", "Two", "Three")

    val dialog = AlertDialog.Builder(this)
    dialog.setTitle("Hello World")
    dialog.setItems(targetList) { _, index ->
        val value = targetList[index]
        Toast.makeText(this, "Result = $value", Toast.LENGTH_SHORT).show()
    }
    dialog.setNegativeButton("Cancel") { _, _ ->
        // Do Nothing
    }
    dialog.show()
}

Java

 activity_main.xml

* button x 1、EditText x1 を画面に追加

MainActivity.java

import com.example.dialog.SampleDialogClickHandler;
import com.example.dialog.SampleMultiChoiceClickHandler;

import android.os.Bundle;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {
    private Button button1;
    private EditText editText1;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.button1 = (Button) findViewById(R.id.button1);
        this.button1.setOnClickListener(this);
        this.editText1 = (EditText)findViewById(R.id.editText1);
    }
        
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.button1:
            // ★ここでリスト選択表示★
            String[] items = new String[] {"Java", "C/C++"};
            
            AlertDialog.Builder dialog1 = new AlertDialog.Builder(this);
            dialog1.setTitle("Hello, Title!");
            dialog1.setIcon(1);
            dialog1.setItems(items, new SampleDialogClickHandler(this.editText1));
            dialog1.setNeutralButton("Cancel", new SampleDialogClickHandler(this.editText1));
            dialog1.show();
            break;
        }
    }
}

SampleDialogClickHandler.java

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.widget.EditText;

public class SampleDialogClickHandler implements DialogInterface.OnClickListener {
    private String choosedData = null;
    private EditText editText1;
    
    public SampleDialogClickHandler(EditText editText1) {
        this.editText1 = editText1;
    }

    @Override
    public void onClick(DialogInterface arg0, int arg1) {
        switch(arg1){
        case AlertDialog.BUTTON_NEUTRAL:
            this.choosedData = null;
            this.editText1.setText("Click Cancel.");
            break;
        case 0:
            this.choosedData = "Java";
            this.editText1.setText(String.format("You chose %s", this.choosedData));
            break;
        case 1:
            this.choosedData = "C/C++";
            this.editText1.setText(String.format("You chose %s", this.choosedData));
            break;
        }
    }
}

【2】トラブルシューティング

リスト選択/チェックボックス/ラジオボタンのダイアログが表示されない

 * リスト選択/チェックボックス/ラジオボタンのダイアログが表示されない
 * 大分、はまった...

原因

 * 「setMessage」を使用していた

 サンプル

...
dialog.setMessage("Hello, Dialog Message!"); // ★設定してたら表示されない★
...

解決策

 * 「setMessage」を削除

 参考資料
http://fernweh.jp/b/android-alertdialog/
http://androyer.blogspot.jp/2011/07/alertdialog.html

 参考資料

Kotlin
https://qiita.com/hokutonikukyu/items/ebbc0318c07035e04bf7

色々なサイトを見たが、以下が一番分かりやすい
http://blog.oukasoft.com/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0/%E3%80%90android%E3%80%91%E3%83%80%E3%82%A4%E3%82%A2%E3%83%AD%E3%82%B0%EF%BC%88alertdialog%EF%BC%89%E3%82%92%E8%A1%A8%E7%A4%BA%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/
このサイトもいい
http://www.hakkaku.net/articles/20090924-581

関連記事

ダイアログ表示 ~ 入門編 / トースト・Toast ~
https://dk521123.hatenablog.com/entry/2013/10/14/002656
ダイアログ表示 ~ 基本編 / アラートダイアログ ~
https://dk521123.hatenablog.com/entry/2013/10/05/214058
ダイアログ表示 ~ 基本編 / YES/NO/CANCELボタン ~
https://dk521123.hatenablog.com/entry/2013/10/06/122942
ダイアログ表示 ~ 基本編 / チェックボックスラジオボタン
https://dk521123.hatenablog.com/entry/2013/10/09/001500
ダイアログ表示 ~ 基本編 / 日付・時間ダイアログ ~
https://dk521123.hatenablog.com/entry/2020/07/26/000000
ダイアログ表示 ~ 基本編 / Notification(通知) ~
https://dk521123.hatenablog.com/entry/2020/08/01/000000