with oncreatedialog example custom activity android android-fragments alertdialog

example - oncreatedialog android



¿Cómo usar el fragmento de diálogo?(showDialog obsoleto) Android (4)

Entiendo que existe esta documentación.

http://developer.android.com/reference/android/app/DialogFragment.html#AlertDialog

pero como nuevo aprendiz de Android / Java no es fácil entender la cantidad de código involucrado al escribir un simple diálogo de alerta que aparece con un mensaje de 2 opciones (sí / no).

Aquí está el código que tengo actualmente en mi archivo MainActivity:

final private int RESET_DIALOG = 0; private OnClickListener resetButtonListener = new OnClickListener() { @Override public void onClick(View v) { showDialog(RESET_DIALOG); } }; protected android.app.Dialog onCreateDialog(int id) { switch(id) { case RESET_DIALOG: AlertDialog.Builder builder = new Builder(this); return builder .setMessage("Are you sure you want to reset the count?") .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did not reset!", 5).show(); } }) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did Reset!", 5).show(); } }) .create(); } return null; };

Este es mi intento de seguir las instrucciones en el sitio de Android: Archivo de actividad principal:

final private int RESET_DIALOG = 0; private OnClickListener resetButtonListener = new OnClickListener() { @Override public void onClick(View v) { Intent intent = new Intent(MainActivity.this, MainDialog.class); startActivity(intent); } }; protected android.app.Dialog onCreateDialog(int id) { switch(id) { case RESET_DIALOG: AlertDialog.Builder builder = new Builder(this); return builder .setMessage("Are you sure you want to reset the count?") .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did not reset!", 5).show(); } }) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did Reset!", 5).show(); } }) .create(); } return null; };

Luego creó una clase MainDialog: (Estoy realmente perdido en cómo hacer esto correctamente o aplicarlo)

package com.proteintracker; import android.support.v4.app.DialogFragment; public class MainDialog extends DialogFragment { public static MyAlertDialogFragment newInstance(int title) { MyAlertDialogFragment frag = new MyAlertDialogFragment(); Bundle args = new Bundle(); args.putInt("title", title); frag.setArguments(args); return frag; } }

No estoy seguro de si se suponía que debía crear una nueva clase para el fragmento y cómo aplicarlo a mi diálogo actual en la pantalla de actividad.


Ejemplo de DialogFragment usando Sherlock

FragmentManager fm = getSherlockActivity().getSupportFragmentManager(); DialogFragment dialog = new DialogFragment(){ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder .setTitle(getString(R.string.delete)+"?") .setPositiveButton(getString(android.R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // do something } }) .setNegativeButton(getString(android.R.string.cancel), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dismiss(); } }); // Create the AlertDialog object and return it return builder.create(); } }; dialog.setCancelable(true); dialog.show(fm, "DELETE_DIALOG_FRAGMENT");


Puedes mostrar el diálogo así:

new AlertDialog.Builder(this) .setMessage("Are you sure you want to reset the count?") .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did not reset!", 5).show(); } }) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did Reset!", 5).show(); } }) .create().show();


Puedes mostrar tu DialogFragment así:

void showDialog() { DialogFragment newFragment = MyAlertDialogFragment.newInstance( R.string.alert_dialog_two_buttons_title); newFragment.show(getFragmentManager(), "dialog"); }

En su cuadro de diálogo de fragmentos, debe anular onCreateDialog y devolver su instancia de Dialog simple, por ejemplo, AlertDialog .

public static class MyAlertDialogFragment extends DialogFragment { public static MyAlertDialogFragment newInstance(int title) { MyAlertDialogFragment frag = new MyAlertDialogFragment(); Bundle args = new Bundle(); args.putInt("title", title); frag.setArguments(args); return frag; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { int title = getArguments().getInt("title"); AlertDialog.Builder builder = new Builder(this); return builder .setMessage("Are you sure you want to reset the count?") .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did not reset!", 5).show(); } }) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { Toast.makeText(MainActivity.this, "Did Reset!", 5).show(); } }) .create(); } }


Alerta con vista personalizada.

public class MyAlertDialogFragment extends DialogFragment { public static final String TITLE = "dataKey"; public static MyAlertDialogFragment newInstance(String dataToShow) { MyAlertDialogFragment frag = new MyAlertDialogFragment(); Bundle args = new Bundle(); args.putString(TITLE, dataToShow); frag.setArguments(args); return frag; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { String mDataRecieved = getArguments().getString(TITLE,"defaultTitle"); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); LayoutInflater inflater = getActivity().getLayoutInflater(); View view = inflater.inflate(R.layout.alert_layout, null); TextView mTextView = (TextView) view.findViewById(R.id.textview); mTextView.setText(mDataRecieved); setCancelable(false); builder.setView(view); Dialog dialog = builder.create(); dialog.getWindow().setBackgroundDrawable( new ColorDrawable(Color.TRANSPARENT)); return dialog; } }

Y alerta con la interfaz YesNoDialog

public class MyAlertDialogFragment extends DialogFragment { public static final String TITLE = "dataKey"; private OnYesNoClick yesNoClick; public static MyAlertDialogFragment newInstance(String dataToShow ) { MyAlertDialogFragment frag = new MyAlertDialogFragment(); Bundle args = new Bundle(); args.putString(TITLE, dataToShow); frag.setArguments(args); return frag; } public void setOnYesNoClick(OnYesNoClick yesNoClick) { this.yesNoClick = yesNoClick; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { String mDataRecieved = getArguments().getString(TITLE,"defaultTitle"); AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder .setMessage("Message to Show") .setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { if(yesNoClick != null) yesNoClick.onNoClicked(); } }) .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { if(yesNoClick != null) yesNoClick.onYesClicked(); } }); Dialog dialog = builder.create(); dialog.getWindow().setBackgroundDrawable( new ColorDrawable(Color.TRANSPARENT)); return dialog; } public interface OnYesNoClick{ void onYesClicked(); void onNoClicked(); } }

Utilízalo como

private void showYesNoDialog(){ MyAlertDialogFragment yesNoAlert = MyAlertDialogFragment.newInstance( "Data to Send"); yesNoAlert.show(getFragmentManager(), "yesNoAlert"); yesNoAlert.setOnYesNoClick(new MyAlertDialogFragment.OnYesNoClick() { @Override public void onYesClicked() { //yes or ok clicked } @Override public void onNoClicked() { //no or cancel clicked } }); }