Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Cómo ejecutar la acción después de pulsar el botón positivo de DialogFragment

He creado el siguiente DialogFragment derivándolo de la documentación de Android:

Public class PayBillDialogFragment extends DialogFragment {

  • Separar la línea XML para el modo de depuración o liberación en el manifiesto android
  • Java.lang.RuntimeException: WakeLock bajo-bloqueado C2DM_LIB
  • Realmente Preferir Red: seleccione mi propio proveedor de red tan pronto como esté disponible (desde el código)
  • ¿Por qué está desfasado el LayoutAlgorithm.SINGLE_COLUMN de WebView?
  • ¿Por qué no Service.onStop método?
  • Errores de Gradle en Android Studio
  • @Override public Dialog onCreateDialog(Bundle savedInstanceState){ final Bundle b = this.getArguments(); // Use the Builder class for convenient dialog construction AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("Paga bollettino") .setPositiveButton("Paga", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // FIRE ZE MISSILES! } }) .setNegativeButton("Cancella", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { // User cancelled the dialog } }); // Create the AlertDialog object and return it return builder.create(); } } 

    De otro Fragmento (un ListFragment), cuando se hace clic en una fila de la lista, se debe abrir el DialogFragment y después de presionar el botón positivo del DialogFragment quiero poder eliminar la fila seleccionada del ListFragment y también llamar a un método para Realizar una acción remota asociada a la eliminación. Implementé el ListFragment como sigue:

     public static class ListFragment extends android.support.v4.app.ListFragment { ArrayList<String> listItems=new ArrayList<String>(); ArrayAdapter<String> adapter; public static final String ARG_SECTION_NUMBER = "section_number"; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View rootView = inflater.inflate(R.layout.list_fragment_view, container, false); ListView lv = (ListView)rootView.findViewById(android.R.id.list); }}); adapter=new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_list_item_1, listItems); setListAdapter(adapter); return rootView; } @Override public void onListItemClick(ListView l, View v, int position, long id) { //opening the dialogfragment } } } 

    Lo que no sé es cómo manejar la acción después de hacer clic en el botón positivo del DialogFragment. ¿Me puedes ayudar?

    EDIT: para aclarar, este es el flujo de trabajo: haga clic en la lista -> mostrar el DialogFragment -> después de hacer clic en DialogFragment eliminar el elemento de la lista.

  • ¿Cuál es el uso de un ... -v21.xml?
  • ¿Cuál es el tamaño máximo de la textura (Andengine)
  • "No se puede instalar esta aplicación porque otro usuario ya ha instalado una versión incompatible en este dispositivo"
  • Cómo compilar C en un archivo binario ejecutable y ejecutarlo en Android desde Android Shell?
  • Uso del archivo JSON en los recursos de la aplicación para Android
  • ¿Cómo utilizar EditTextPreference como un campo de texto de contraseña enmascarado?
  • 4 Solutions collect form web for “Cómo ejecutar la acción después de pulsar el botón positivo de DialogFragment”

    Así es como manejo la comunicación entre el fragmento y el fragmento de diálogo

    Ejemplo de fragmento:

     public class MainFragment extends Fragment { private static final int REQ_CODE = 1; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.main_fragment, container, false); Button b = (Button) v.findViewById(R.id.button); b.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { MyDialog dialog = new MyDialog(); dialog.setTargetFragment(MainFragment.this, REQ_CODE); dialog.show(getFragmentManager(), "dialog"); } }); return v; } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Toast.makeText(getActivity(), "Result: " + resultCode, Toast.LENGTH_SHORT).show(); super.onActivityResult(requestCode, resultCode, data); } } 

    Ejemplo DialogFragment:

     public class MyDialog extends DialogFragment { @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("My dialog message") .setPositiveButton("Ok", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { notifyToTarget(Activity.RESULT_OK); } }) .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { notifyToTarget(Activity.RESULT_CANCELED); } }); return builder.create(); } private void notifyToTarget(int code) { Fragment targetFragment = getTargetFragment(); if (targetFragment != null) { targetFragment.onActivityResult(getTargetRequestCode(), code, null); } } } 

    Este es el único método que obtuve trabajando también al cambiar la orientación.

    Tiene dos opciones para llamar a ListFragment de PayBillDialogFragment .

    El primero es recomendado por las pautas de Android. Toda la comunicación pasa por la Activity hosting. Así obtendrá la Activity hosting llamando a ((HostingActivity)PayBillDialogFragment.getActivity()).deleteItem() dentro de PayBillDialogFragment.setPositiveButton(onClick()) . En HostingActivity.deleteItem() obtener el PayBillDialogFragment inflada y llamar a algún método de eliminación en él.

    Consulte http://developer.android.com/guide/components/fragments.html#EventCallbacks

    En segundo lugar . Usted puede simplemente DialogFragment.setTargetFragment() al crear el objeto DialogFragment y luego dentro de PayBillDialogFragment.setPositiveButton(onClick()) puede obtener PayBillDialogFragment por DialogFragment.getTargetFragment() y llamar al método delete allí.

    Vea la devolución de llamada a un fragmento de un DialogFragment

    Para llamar al diálogo puede usar esto:

     android.support.v4.app.FragmentManager fm = getSupportFragmentManager(); if (fm.findFragmentByTag("PayBillDialogFragment") == null) { PayBillDialogFragment payBillDialogFragment = new PayBillDialogFragment(); payBillDialogFragment.show(fm, "PayBillDialogFragment"); } 

    En su cuadro de diálogo,

     setPositiveButton("Paga", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { //Add your code here that should execute //when positive button is clicked } }); 

    El Fragmento de Lista usaría un Adaptador para mostrar elementos. El adaptador requiere entrada en forma de alguna colección. Por lo tanto, lo que puede hacer es, cuando el usuario pulsa decir ok botón en el fragmento de diálogo y se comunica que de nuevo a Fragmento de la lista, puede eliminar ese elemento en particular de la colección y de nuevo el adaptador de Fragmento de lista con la colección modificada.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.