Adding a list to an Android AlertDialog
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 usegetApplicationContext()
or you will get anIllegalStateException
(see here for why). Instead, get a reference to the activity context, such as withthis
. - You can also populate the list items from a database or another source using
setAdapter
orsetCursor
or passing in aCursor
orListAdapter
into thesetSingleChoiceItems
orsetMultiChoiceItems
. - 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

