2013-03-17 6 views
19

è possibile passare una variabile di contesto a un DialogFragment?passaggio contesto come argomento di DialogFragment

ho utilizzare questo codice dialogo all'interno per il passaggio di una stringa:

public static ConfirmDialog newInstance(String f) { 
    ConfirmDialog d = new ConfirmDialog(); 

    Bundle args = new Bundle(); 
    args.putString("FILE_NAME", f); 
    d.setArguments(args); 

    return d; 
} 

ma non trovo alcuna funzione come putString per il passaggio di contesto. È possibile farlo?

risposta

47

tuo DialogFragment ha un metodo molto utile per ottenere un esempio Context:

getActivity() 

Fragment#getActivity() restituirà l'istanza del Activity (che è un Context) che il Fragment è attaccato. Usalo dopo che è stato chiamato il frammento onAttach(). Il grafico sottostante illustra Fragment lifecycle, come potete vedere, utilizzando getActivity() da onCreate() a onDestroy() dovrebbe essere una chiamata valida.

enter image description here

Per ulteriori informazioni, leggere la documentazione Fragment

4
@Override 
public void onAttach(Activity activity) { 
    // TODO Auto-generated method stub 
    super.onAttach(activity); 
    context=activity; 
} 

necessità di utilizzare onAttach metodo: per Fragment dialogo

+0

show() viene chiamato prima e getActivity() è nullo. Quindi, come posso ottenere il contesto, allora? – ralphgabb

0

uso in questo modo:

public class Dialog extends DialogFragment implements OnClickListener { 
    public void onClick(View v) { 
    switch (v.getId()) { 
     case R.id.message: { 
      this.startActivity(new Intent(context, Login.class)); 
           //or use getActivity() instead of context 
      } 
      break; 
     } 
    } 
    @Override 
    public void onAttach(Activity activity) { 
     // TODO Auto-generated method stub 
     super.onAttach(activity); 
     context=activity; 
    } 
} 
0

onAttach (Attività dell'attività) è ora obsoleto,

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
} 


uso onAttach (contesto Context) invece il metodo

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
} 
Problemi correlati