Come posso passare i valori tra un dialogo e un'attività?

Chiedo all'utente di immettere tramite un Dialog:

package com.android.cancertrials; import android.app.Dialog; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; public class CustomDialog extends Dialog { private String name; // private ReadyListener readyListener; public static EditText etName; public String zip; public CustomDialog(Context context, String name) { super(context); this.name = name; // this.readyListener = readyListener; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mycustomdialog); setTitle("Enter the Zip Code "); Button buttonOK = (Button) findViewById(R.id.ok); buttonOK.setOnClickListener(new OKListener()); etName = (EditText) findViewById(R.id.EditZip); } private class OKListener implements android.view.View.OnClickListener { @Override public void onClick(View v) { // readyListener.ready(String.valueOf(etName.getText())); CustomDialog.this.dismiss(); } } } 

Quando l'utente esegue il colpo OK, come posso passare il valore immesso nella casella di text, di nuovo a una variabile membro nell'attività che ha lanciato?

  • Android XML - come get elementi allineati lontano a sinistra, al centro e a destra
  • Come dire a ProGuard di tenere campi privati ​​senza specificare each field
  • Rimozione di un'attività dalla pila di cronologia
  • Devo utilizzare ActionBarSherlock per applicazioni Android 4.0?
  • INSTALL_PARSE_FAILED_NO_CERTIFICATES non ha installato il file apk modificato (firma SHA1 non valida), anche dopo la firma con jarsigner
  • Android Dev - URL di richiamata non funzionante ... (0_o)
  • spinner che si espande oltre i limiti dello schermo
  • Come combinare OnClickListener e OnTouchListener per un ImageButton
  • Android ottiene PID di altre applicazioni
  • I contenuti condivisi utilizzando il collegamento dinamico non vengono visualizzati come quelli condivisi dopo l'apertura
  • Come disegnare il path mentre mi muovo a partire dalla posizione corrente utilizzando Google Maps
  • Percorso Android per arrays - leggere i punti su un path?
  • 2 Solutions collect form web for “Come posso passare i valori tra un dialogo e un'attività?”

    Puoi farlo in modi diversi … in realtà, se la window di dialogo ha solo un button "OK" per distriggersre, perché non crei una window di dialogo personalizzata utilizzando la class AlertDialog.Builder anziché la sottoclass Dialog ?

    Comunque … supponiamo che tu abbia buone ragioni per farlo nel modo in cui l'hai fatto. In quel caso, avrei usato l'ObserverPattern. Qualcosa come questo:

     public class CustomDialog extends Dialog { private String name; public static EditText etName; public String zip; OnMyDialogResult mDialogResult; // the callback public CustomDialog(Context context, String name) { super(context); this.name = name; } @Override public void onCreate(Bundle savedInstanceState) { // same you have } private class OKListener implements android.view.View.OnClickListener { @Override public void onClick(View v) { if( mDialogResult != null ){ mDialogResult.finish(String.valueOf(etName.getText())); } CustomDialog.this.dismiss(); } } public void setDialogResult(OnMyDialogResult dialogResult){ mDialogResult = dialogResult; } public interface OnMyDialogResult{ void finish(String result); } } 

    Sulla tua attività:

     CustomDialog dialog; // initialization stuff, blah blah dialog.setDialogResult(new OnMyDialogResult(){ public void finish(String result){ // now you can use the 'result' on your activity } }); 

    Leggendo il tuo codice sembra già provato qualcosa di simile.

    Modifica: farlo nel modo più semplice

    È comunque ansible utilizzare il layout di mycustomdialog . Ecco come utilizzare l' AlertDialog.Builder :

     LayoutInflater inflater = LayoutInflater.from(YourActivity.this); final View yourCustomView = inflater.inflate(R.layout.mycustomdialog, null); final TextView etName = (EditText) yourCustomView.findViewById(R.id.EditZip); AlertDialog dialog = new AlertDialog.Builder(YourActivity.this) .setTitle("Enter the Zip Code") .setView(yourCustomView) .setPositiveButton("OK", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { mSomeVariableYouHaveOnYourActivity = etName.getText().toString(); } }) .setNegativeButton("Cancel", null).create(); dialog.show(); 

    Lo realizzo attraverso l'intento di trasmissione da [dialogo] a [attività] .

    In primo luogo passare l'attività nella function:

     public class DialogFactory { public static AlertDialog addSomeDialog(Activity activity) { builder.setPositiveButton("OK", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { if (SOMETHING_IS_TRUE) { // prepare your parameters that need to be sent back to activity Intent intent = new Intent(IntentAction.INTENT_ADD_TASK); intent.putExtra(IntentConst.PARAM_A, aInput); intent.putExtra(IntentConst.PARAM_B, bInput); activity.sendBroadcast(intent); Toast.makeText(activity, "Something is TRUE!", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(activity, "Something NOT TRUE!", Toast.LENGTH_SHORT).show(); } } }); } } 

    Chiamare sopra funziona quando un menu o un button di opzione ha fatto clic sull'attività.

    Preparate quindi la tua attività per ricevere l'intento con BroadcastReceiver nell'attività:

     private BroadcastReceiver mReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction() == IntentAction.INTENT_ADD_TASK) { // Do whatever you want to refresh the layout or anything in the activity // or even ask fragments inside to act upon it. ..... } } }; 

    Non dimenticare di registrare e distriggersre il ricevitore:

     @Override protected void onPause() { unregisterReceiver(mReceiver); super.onPause(); } @Override protected void onResume() { super.onResume(); registerReceiver(mReceiver, new IntentFilter(IntentAction.INTENT_ADD_TASK)); } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.