ventana studio personalizado emergente ejemplo edittext custom con android android-alertdialog

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>