Allan Mermod
Allan Mermod

Reputation: 816

AlertDialog's items not displayed

I create an AlertDialog with an AlertDialog.Builder and set some items with setItems(). The dialog is shown but I cannot see any of the items. All I see is the message.

final CharSequence[] items = {"Red", "Green", "Blue"};

AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setMessage("Pick a color");
dialogBuilder.setItems(items, new DialogInterface.OnClickListener() {        
    public void onClick(DialogInterface dialog, int which) {
        // Do anything you want here
    }    
});

dialogBuilder.create().show();

If I set the PositiveButton, I can see that button just fine. I also tried setting MultiChoiceItems and SingleChoiceItems but neither of these work either.

Upvotes: 57

Views: 23935

Answers (8)

Moz
Moz

Reputation: 119

Use setView(View) with ListView if you want to achieve the effect of displaying a dialog with title, message and list of items at the same time.

Upvotes: 0

ubuntudroid
ubuntudroid

Reputation: 3989

If you want to set a message AND items, just use setCustomTitle() with a TextView like so:

dialogBuilder.setCustomTitle(TextView(context).apply {
    setPadding(
       16.dpToPx().toInt(),
       16.dpToPx().toInt(),
       16.dpToPx().toInt(),
       0
    )
    setText(it.message)
    setTextColor(Color.BLACK)
    textSize = 18f
})
dialogBuilder.setItems(...)

Note, that you cannot set a title this way, but of course you could create a custom title layout which support setting both the title AND the message.

dpToPx() is just a simple conversion extension function and not in the scope of your question, but here it is for completeness sake:

@JvmOverloads
@Dimension(unit = Dimension.PX)
fun Number.dpToPx(
    metrics: DisplayMetrics = Resources.getSystem().displayMetrics
): Float {
    return toFloat() * metrics.density
}

Upvotes: 2

itsrajesh4uguys
itsrajesh4uguys

Reputation: 4638

Why don't you go for setTitle instead of the setMessage? Try with setTitle("Pick a color").

I hope it will help you.

Upvotes: 3

Scott Auman
Scott Auman

Reputation: 19

If you are using a resource string array you must include the resource packaging. context().getResources().getStringArray(R.array.items);

My list was not showing by using the R.array.items until i gave the pointer the context and resource packaging.

Good luck!

Upvotes: 0

Dipendra
Dipendra

Reputation: 1557

Try alertDialogBuilder.setCustomTitle(view)

Upvotes: 3

Niranj Patel
Niranj Patel

Reputation: 33238

try this

final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setTitle("Pick a color");
dialogBuilder.setSingleChoiceItems(items,-1, new DialogInterface.OnClickListener()
@Override
public void onClick(DialogInterface dialog, int which) 
{
}
});
dialogBuilder.show();

Upvotes: 0

Dipak Keshariya
Dipak Keshariya

Reputation: 22291

Use Below Code:-

final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(activity);
dialogBuilder.setTitle("Pick a color");
dialogBuilder.setItems(items, new DialogInterface.OnClickListener() {

    public void onClick(DialogInterface dialog, int which) {
        // Do anything you want here
    }

});
dialogBuilder.create().show();

Upvotes: 0

Paweł Nadolski
Paweł Nadolski

Reputation: 8474

Use setTitle instead of setMessage which sets message body and overrides the items list.

Upvotes: 193

Related Questions