Reputation: 816
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
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
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
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
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
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
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
Reputation: 8474
Use setTitle
instead of setMessage
which sets message body and overrides the items list.
Upvotes: 193