2011-05-25 18 views
9

Estoy buscando una manera de pasar datos de una actividad a un cuadro de diálogo. Estoy tratando de llamar al showDialog(int);, sin embargo, no veo una forma de pasar ningún dato al cuadro de diálogo. tengo que pasar una cadena al cuadro de diálogo con el fin de mostrar una confirmación :)Pasar datos de la actividad al cuadro de diálogo

Saludos

Respuesta

13

Si el idioma de Android 2.2 (API nivel 8 o superior) se puede utilizar

public final boolean showDialog (int id, Bundle args) 

y pasar sus argumentos en Bundle. Ver documentation.

Si desea admitir versiones anteriores de Android, debe guardar sus argumentos en Activity miembros de la clase y luego acceder a ellos desde su función onPrepareDialog. Tenga en cuenta que onCreateDialog no se ajustará a sus necesidades, ya que se llama solo una vez para la creación de diálogos.

class MyActivity { 

    private static int MY_DLG = 1; 
    private String m_dlgMsg; 

    private showMyDialog(String msg){ 
     m_dlgMsg = msg; 
     showDialog(MY_DLG); 
    } 

    private doSomething() { 
     ... 
     showMyDlg("some text"); 
    } 

    protected void onCreateDialog(int id){ 
     if(id == MY_DLG){ 
      AlertDialog.Builder builder = new AlertDialog.Builder(this); 
      .... 
      return builder.create(); 
     } 
     return super.onCreateDialog(id); 
    }   

    @Override 
    protected void onPrepareDialog (int id, Dialog dialog){ 
     if(id == MY_DLG){ 
      AlertDialog adlg = (AlertDialog)dialog; 
      adlg.setMessage(m_dlgMsg); 
     } else { 
      super.onPrepareDialog(id, dialog); 
     }    
    } 
} 
+0

impresionante, suena bien :) El único problema es que cuando usted tiene, por lo que no parece doSomething() Estoy llamando showDialog desde dentro de un evento de clic en línea, que se pasa a través de los valores, i' No estoy seguro de por qué ... – jsw

+0

'showDialog (int id, Bundle args)' obsoleto en la API 13 –

1

Cuando usted está haciendo showDialog (int) método de la Actividad onCreateDialog se llama. Allí debe crear una instancia de diálogo y devolverla, y se mostrará.

Luego está creando un diálogo, tiene acceso total a los campos de su clase y puede usar valores de ellos para ajustar los parámetros y el contenido del cuadro de diálogo creado.

1
//`enter code here`I used shared preferences and it worked. 
**in your activity:** 

//your field: public static final String GAME_PREFERENCES = null; 

         String template = selectedItem.getProduct().getName(); 
      String num = selectedItem.getNumber(); 
      String id = selectedItem.getId(); 
      String location = selectedItem.getLocationName(); 


     SharedPreferences settings = getSharedPreferences(GAME_PREFERENCES, 
        MODE_PRIVATE); 
      SharedPreferences.Editor prefEditor = settings.edit(); 
      prefEditor.putString("template", template); 
      prefEditor.putString("num", num); 
      prefEditor.putString("id", id); 
      prefEditor.putString("location", location); 
      prefEditor.commit(); 

**in your dialog class:** 
//In my case I needed to add activity because how i created dialog: 

public MyDialog(Context context, int theme) { 
     super(context, theme); 
     init(context); 
    } 

    private void init(Context context) { 
     setContentView(R.layout.dialog); 
     this.context = context; 
     final Activity activity = (Activity) context; 

       // If you dont call activity you can try context.getpreferences(......) 
     SharedPreferences prefs = ((Activity) context) 
       .getPreferences(Context.MODE_PRIVATE); 

     String template = prefs.getString("template", ""); 
     String num = prefs.getString("num", ""); 
     String id = prefs.getString("id", ""); 
     String location = prefs.getString("location", ""); 

}`enter code here` 
0

Sé que esta pregunta es viejo, pero se puede utilizar el método setArguments si está utilizando un cuadro de diálogo personalizado.

String myString = "How to do it" 
DialogFragment newFragment = new AddUserDialog(); 
       Bundle args = new Bundle(); 
       args.putString("number", myString); //The first parameter is the key that will be used to retrieve the value, which is the second parameter. 
       newFragment.setArguments(args); 
       newFragment.show(getSupportFragmentManager(), "add_a_member"); 
Cuestiones relacionadas