ventana studio personalizado emergente ejemplo edittext custom con botones android button layout dialog alertdialog

studio - progress dialog personalizado android



¿Cómo puedo agregar botones personalizados en el diseño de AlertDialog? (4)

Tengo AlertDialog con botones positivos y negativos. En el diseño de AlertDialog tengo EditText y dos botones (btnAdd1, btnAdd2). Quiero que cuando el usuario haga clic en el botón btnAdd1 o btnAdd2 agregue el mismo texto a EditText en AlertDialog (pero no cierre AlertDialog). ¿Es posible esto en AlertDialog o tengo que usar solo Dialog?

Este es el diseño (R.layout.prompt) de AlertDialog:

<LinearLayout> <EditText android:id="@+id/userInput" android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="text" > <requestFocus /> </EditText> <Button android:id="@+id/btnAdd1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bla" /> <Button android:id="@+id/btnAdd2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="bla" /> </LinearLayout>

Y este es el código fuente:

LayoutInflater layoutInflater = LayoutInflater.from(this); View promptView = layoutInflater.inflate(R.layout.prompt, null); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this); alertDialogBuilder.setView(promptView); alertDialogBuilder .setCancelable(false) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //... } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.cancel(); } }); AlertDialog alertD = alertDialogBuilder.create(); alertD.show();

Quiero obtener acceso a btnAdd1 y btnAdd2 desde el diseño. Establezca OnClickListener () en estos dos botones.


El siguiente código R.layout.prompt una vista de R.layout.prompt y la establecerá en AlertDialog. Los botones positive y negative no serán utilizados. Puede configurar los comportamientos onClick para btnAdd1 y btnAdd2 :

LayoutInflater layoutInflater = LayoutInflater.from(this); View promptView = layoutInflater.inflate(R.layout.prompt, null); final AlertDialog alertD = new AlertDialog.Builder(this).create(); EditText userInput = (EditText) promptView.findViewById(R.id.userInput); Button btnAdd1 = (Button) promptView.findViewById(R.id.btnAdd1); Button btnAdd2 = (Button) promptView.findViewById(R.id.btnAdd2); btnAdd1.setOnClickListener(new OnClickListener() { public void onClick(View v) { // btnAdd1 has been clicked } }); btnAdd2.setOnClickListener(new OnClickListener() { public void onClick(View v) { // btnAdd2 has been clicked } }); alertD.setView(promptView); alertD.show();


Podrías probar algo como esto:

dialog.setPositiveButton(R.string.positive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { dialog.show(); } });


lo que quieres hacer es;

alertD.show(); Button button = (Button)promptView.findViewById(R.id.buttonId); button.setOnClickListener(....)

utilizando la vista para llamar a findViewById , en lugar de la actividad, que buscará el id. en el diseño que se muestra.


De acuerdo con este enfoque, puedo crear el botón de imagen, pero si quiero descartar o cancelar el diálogo en el botón Cancelar, entonces lo que tengo que hacer ...

public static void alertDialogShow(final Context context, final String resultMobile) { LayoutInflater li = LayoutInflater.from(context); View promptsView = li.inflate(R.layout.prompt, null); AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder( context, AlertDialog.THEME_DEVICE_DEFAULT_LIGHT); // set prompts.xml to alertdialog builder alertDialogBuilder.setView(promptsView); final EditText userInput = (EditText) promptsView .findViewById(R.id.editTextDialogUserInput); userInput.setText(resultMobile); userInput.setEnabled(false); btnCancel.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { } });