web-dev-qa-db-ja.com

Androidの警告ダイアログにリストビューを表示する方法を教えてください。

Androidアプリケーションで、AlertDialogにカスタムリストビューを表示したいです。

これどうやってするの?

259
user2235726

AlertDialogでカスタムリストを表示するためにコードの下で使用されます

AlertDialog.Builder builderSingle = new AlertDialog.Builder(DialogActivity.this);
builderSingle.setIcon(R.drawable.ic_launcher);
builderSingle.setTitle("Select One Name:-");

final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(DialogActivity.this, Android.R.layout.select_dialog_singlechoice);
arrayAdapter.add("Hardik");
arrayAdapter.add("Archit");
arrayAdapter.add("Jignesh");
arrayAdapter.add("Umang");
arrayAdapter.add("Gatti");

builderSingle.setNegativeButton("cancel", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
            }
        });

builderSingle.setAdapter(arrayAdapter, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                String strName = arrayAdapter.getItem(which);
                AlertDialog.Builder builderInner = new AlertDialog.Builder(DialogActivity.this);
                builderInner.setMessage(strName);
                builderInner.setTitle("Your Selected Item is");
                builderInner.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog,int which) {
                                dialog.dismiss();
                            }
                        });
                builderInner.show();
            }
        });
builderSingle.show();
463

ドキュメントによれば によると、AlertDialogで使用できる3種類のリストがあります。

  1. 伝統的な単一選択リスト
  2. 永続的な単一選択リスト(ラジオボタン)
  3. 永続的な複数選択リスト(チェックボックス)

以下にそれぞれの例を挙げます。

伝統的な単一選択リスト

伝統的な単一選択リストを作る方法はsetItemsを使うことです。

enter image description here

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
builder.setItems(animals, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        switch (which) {
            case 0: // horse
            case 1: // cow
            case 2: // camel
            case 3: // sheep
            case 4: // goat
        }
    }
});

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

ユーザーがリストアイテムコントロールをクリックするとすぐにOnClickListenerに戻るため、[OK]ボタンは必要ありません。

ラジオボタンリスト

enter image description here

従来のリストに対するラジオボタンリストの利点は、ユーザーが現在の設定を確認できることです。ラジオボタンリストを作成する方法はsetSingleChoiceItemsを使うことです。

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose an animal");

// add a radio button list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
int checkedItem = 1; // cow
builder.setSingleChoiceItems(animals, checkedItem, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user checked an item
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

ここで選択した項目をハードコードしましたが、実際のプロジェクトではクラスメンバー変数を使ってそれを追跡することができます。

チェックボックスリスト

enter image description here

チェックボックスリストを作成する方法はsetMultiChoiceItemsを使用することです。

// setup the alert builder
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Choose some animals");

// add a checkbox list
String[] animals = {"horse", "cow", "camel", "sheep", "goat"};
boolean[] checkedItems = {true, false, false, true, false};
builder.setMultiChoiceItems(animals, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
        // user checked or unchecked a box
    }
});

// add OK and Cancel buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        // user clicked OK
    }
});
builder.setNegativeButton("Cancel", null);

// create and show the alert dialog
AlertDialog dialog = builder.create();
dialog.show();

ここでは、リストのどの項目がすでにチェックされているかをハードコーディングしました。あなたはそれらをArrayList<Integer>で追跡したいと思うでしょう。詳しくは ドキュメントの例 をご覧ください。常にすべてのチェックを外した状態にしたい場合は、チェック項目をnullに設定することもできます。

ノート

  • 上記のコードのcontextには、getApplicationContext()を使用しないでください。そうしないと、IllegalStateExceptionが表示されます( here を参照してください)。代わりに、thisのように、アクティビティコンテキストへの参照を取得してください。
  • setAdapter または setCursor を使用するか、CursorまたはListAdaptersetSingleChoiceItemsまたはsetMultiChoiceItemsに渡すことで、データベースまたは他のソースからリスト項目を移入することもできます。
  • リストが画面に収まるよりも長い場合、ダイアログは自動的にそれをスクロールします。あなたが本当に長いリストを持っているのであれば、しかし、私はあなたがおそらく カスタムダイアログ with a RecyclerView を作るべきだと思います。
  • 上記のすべての例をテストするために、クリックしたときにダイアログが表示されるよりも単一のボタンを持つ単純なプロジェクトがありました。

    import Android.support.v7.app.AppCompatActivity;
    
    public class MainActivity extends AppCompatActivity {
    
        Context context;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            context = this;
        }
    
        public void showAlertDialogButtonClicked(View view) {
    
            // example code to create alert dialog lists goes here
        }
    }
    

関連する

170
Suragch

カスタムダイアログを使用できます。

カスタムダイアログのレイアウトlist.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:Android="http://schemas.Android.com/apk/res/Android" 
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content">
    <ListView
        Android:id="@+id/lv"
        Android:layout_width="wrap_content"
        Android:layout_height="fill_parent"/>
</LinearLayout>

あなたの活動の中で

Dialog dialog = new Dialog(Activity.this);
       dialog.setContentView(R.layout.list)

ListView lv = (ListView ) dialog.findViewById(R.id.lv);
dialog.setCancelable(true);
dialog.setTitle("ListView");
dialog.show();

編集する

Alertdialogを使う

String names[] ={"A","B","C","D"};
AlertDialog.Builder alertDialog = new AlertDialog.Builder(MainActivity.this);
LayoutInflater inflater = getLayoutInflater();
View convertView = (View) inflater.inflate(R.layout.custom, null);
alertDialog.setView(convertView);
alertDialog.setTitle("List");
ListView lv = (ListView) convertView.findViewById(R.id.lv);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,Android.R.layout.simple_list_item_1,names);
lv.setAdapter(adapter);
alertDialog.show();

custom.xml

<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:id="@+id/listView1"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent" >

</ListView>

スナップ

enter image description here

119
Raghunandan
final CharSequence[] items = {"A", "B", "C"};

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Make your selection");
builder.setItems(items, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
        // Do something with the selection
        mDoneButton.setText(items[item]);
    }
});
AlertDialog alert = builder.create();
alert.show();
40
Arhat Baid

"import Android.app.AlertDialog;"インポートを使用して、次に書く。

    String[] items = {"...","...."};             
    AlertDialog.Builder build = new AlertDialog.Builder(context);
    build.setItems(items, new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            //do stuff....
        }
    }).create().show();
10
Facebamm

初心者として私はあなたが通過することをお勧めします http://www.mkyong.com/Android/android-custom-dialog-example/ /

それが基本的に何をするのか要約する

  1. ダイアログとメインアクティビティのXMLファイルを作成します。
  2. 必要な場所の主な活動ではAndroidクラスのオブジェクトを作成します Dialog
  3. XMLファイルに基づいてカスタムスタイルとテキストを追加します
  4. dialog.show()メソッドを呼び出します。
3
cjds

これは簡単すぎます

final CharSequence[] items = {"Take Photo", "Choose from Library", "Cancel"};

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

builder.setTitle("Add Photo!");
builder.setItems(items, new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int item) {
        if (items[item].equals("Take Photo")) {
            getCapturesProfilePicFromCamera();
        } else if (items[item].equals("Choose from Library")) {
            getProfilePicFromGallery();
        } else if (items[item].equals("Cancel")) {
            dialog.dismiss();
        }
    }
});
builder.show();
2
Jaydeep purohit

コトリンでは:

fun showListDialog(context: Context){
    // setup alert builder
    val builder = AlertDialog.Builder(context)
    builder.setTitle("Choose an Item")

    // add list items
    val listItems = arrayOf("Item 0","Item 1","Item 2")
    builder.setItems(listItems) { dialog, which ->
        when (which) {
            0 ->{
                Toast.makeText(context,"You Clicked Item 0",Toast.LENGTH_LONG).show()
                dialog.dismiss()
            }
            1->{
                Toast.makeText(context,"You Clicked Item 1",Toast.LENGTH_LONG).show()
                dialog.dismiss()
            }
            2->{
                Toast.makeText(context,"You Clicked Item 2",Toast.LENGTH_LONG).show()
                dialog.dismiss()
            }
        }
    }

    // create & show alert dialog
    val dialog = builder.create()
    dialog.show()
}
1

AlertDialogでEditTextユニットを作成した後に呼び出すメソッドを一般的に使用するのがスムーズではないでしょうか。

public static void EditTextListPicker(final Activity activity, final EditText EditTextItem, final String SelectTitle, final String[] SelectList) {
    EditTextItem.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            AlertDialog.Builder builder = new AlertDialog.Builder(activity);
            builder.setTitle(SelectTitle);
            builder.setItems(SelectList, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialogInterface, int item) {
                    EditTextItem.setText(SelectList[item]);
                }
            });
            builder.create().show();
            return false;
        }
    });
}
0
Jan Bergström