Adding a list to an Android AlertDialog
Tags: Alertdialog, Lists, Android

This is a repost of an answer I wrote on Stack Overflow.

An AlertDialog is a convenient way to solicit a response from a user. However, sometimes the standard positive, negative, and neutral button format isn’t what you want. This post will show you how to add a list of choices to your AlertDialog .

According to the documentation, there are three kinds of lists that can be used with an AlertDialog :

Traditional single-choice list Persistent single-choice list (radio buttons) Persistent multiple-choice list (checkboxes)

I will give an example of each below.

Traditional single-choice list

The way to make a traditional single-choice list is to use setItems .

// 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();

There is no need for an OK button because as soon as the user clicks on a list item control is returned to the OnClickListener .

Radio button list

The advantage of the radio button list over the traditional list is that the user can see what the current setting is. The way to make a radio button list is to use 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();

I hard coded the chosen item here, but you could keep track of it with a class member variable in a real project.

Checkbox list

The way to make a checkbox list is to use 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();

Here I hard coded the the which items in the list were already checked. It is more likely that you would want to keep track of them in an ArrayList<Integer> . See the documentation example for more details. You can also set the checked items to null if you always want everything to start unchecked.

Notes

For the context in the code above, don't use getApplicationContext() or you will get an IllegalStateException (see here for why). Instead, get a reference to the activity context, such as with this .

in the code above, don't use or you will get an (see here for why). Instead, get a reference to the activity context, such as with . You can also populate the list items from a database or another source using setAdapter or setCursor or passing in a Cursor or ListAdapter into the setSingleChoiceItems or setMultiChoiceItems .

or or passing in a or into the or . If the list is longer than will fit on the screen then the dialog will automatically scroll it. If you have a really long list, though, I’m guessing that you should probably make a custom dialog with a RecyclerView.

To test all of the examples above I just had a simple project with a single button than showed the dialog when clicked:

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

}

}

Related