personalizado - popup android studio
AlertDialog: ¿Por qué no puedo mostrar Mensaje y Lista juntos? (4)
De los docs ,
Debido a que la lista aparece en el área de contenido del cuadro de diálogo, el cuadro de diálogo no puede mostrar un mensaje y una lista y debe establecer un título para el cuadro de diálogo con setTitle ().
El setMessage()
y setSingleChoiceItems()
se excluyen mutuamente.
¿Alguien sabe por qué AlertDialog
no muestra la lista de elementos cuando agrego un Mensaje con .setMessage()
? Se mostrarán los botones negativo y positivo, pero no la lista. Cuando borro la línea con .setMessage()
todo funciona.
Este es mi código:
AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this.getActivity());
myAlertDialog.setTitle("Options");
myAlertDialog.setMessage("Choose a color.");
CharSequence[] items = {"RED", "BLUE", "GREEN" };
myAlertDialog.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do stuff
}
});
myAlertDialog.setNegativeButton("NO",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do stuff
}
});
myAlertDialog.setPositiveButton("YES",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do stuff
}
});
myAlertDialog.create();
myAlertDialog.show();
Intente configurar los elementos en su diálogo de alertas como se muestra a continuación:
AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this.getActivity());
myAlertDialog.setTitle("Options");
myAlertDialog.setMessage("Choose a color.");
myAlertDialog.getListView().setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
CharSequence[] items = {"RED","BLUE","GREEN"};
myAlertDialog.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface d, int choice) {
}
});
............
myAlertDialog.create();
myAlertDialog.show();
Puedes hacer tu diálogo de alerta con la lista usando el siguiente método:
AlertDialog.Builder myAlertDialog = new AlertDialog.Builder(this.getActivity());
myAlertDialog.setTitle("Options");
myAlertDialog.setMessage("Choose a color.");
List<String> items = new ArrayList<String>();
items.add("RED");
items.add("BLUE");
items.add("GREEN");
final ArrayAdapter<String> arrayAdapterItems = new ArrayAdapter<String>(this.getActivity(),android.R.layout.simple_expandable_list_item_1, items);
myAlertDialog.setNegativeButton("NO",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do stuff
}
});
myAlertDialog.setPositiveButton("YES",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// do stuff
}
});
myAlertDialog.setAdapter(arrayAdapterItems,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//do what you want
}
});
myAlertDialog.show();
¡Espero eso ayude!
AlertDialog
crea su contenido dinámicamente al verificar si mMessage
que estableció a través de setMessage()
es null
. Si mMessage
NO es null
(eso significa que ha llamado setMessage()
método setMessage()
), entonces configura su contenido para que SOLAMENTE TextView
muestre el mensaje y listview
configuración de vista de lista. Si no ha llamado a setMessage()
, entonces elimina TextView
y luego las configuraciones para listview
.
Solución
Por lo tanto, para mostrar tanto el mensaje como la lista en el cuadro de diálogo, le sugiero que use la siguiente solución que configura la vista personalizada para AlertDialog.
final AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("Dialog title");
final List<String> items = new ArrayList<>();
items.add("Item 1");
items.add("Item 2");
items.add("Item 3");
final ArrayAdapter<String> arrayAdapterItems = new ArrayAdapter<String>(
getContext(), android.R.layout.simple_list_item_single_choice, items);
View content = getLayoutInflater().inflate(R.layout.list_msg_dialog, null);
//this is the TextView that displays your message
TextView tvMessage = content.findViewById(R.id.tv_msg);
tvMessage.setText("Dialog message!!!");
//this is the ListView that lists your items
final ListView lvItems = content.findViewById(R.id.lv_items);
lvItems.setAdapter(arrayAdapterItems);
lvItems.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
builder.setView(content);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//do something
Toast.makeText(MainActivity.this,
items.get(lvItems.getCheckedItemPosition()),
Toast.LENGTH_SHORT).show();
}
});
final AlertDialog dialog = builder.create();
lvItems.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//when you need to act on itemClick
}
});
dialog.show();
Y este es el diseño de list_msg_dialog.xml
:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="3dp">
<TextView
android:id="@+id/tv_msg"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingTop="15dp"
android:text="some text"
android:textAppearance="?android:attr/textAppearanceListItem"
android:textColor="@android:color/black"
android:textSize="18sp" />
<ListView
android:id="@+id/lv_items"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@null" /></LinearLayout>