2013-03-17 10 views
19

jest możliwe przekazanie zmiennej kontekstowej do DialogFragment?przekazywanie kontekstu jako argumentu DialogFragment

mam użyć tego kodu wewnątrz okna na przechodzącą ciąg:

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

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

    return d; 
} 

ale nie znaleźliśmy żadnych funkcji jak putString dla przechodzącą kontekst. Można to zrobić?

Odpowiedz

47

Twój DialogFragment ma bardzo przydatna metoda uzyskiwania instancji Context:

getActivity() 

Fragment#getActivity() powróci instancję Activity (co jest Context) że Fragment jest dołączony do. Użyj go po wywołaniu Fragmentu onAttach(). Poniższa tabela przedstawia Fragment lifecycle, jak widać, przy użyciu getActivity() z onCreate() na onDestroy() powinno być prawidłowe połączenie.

enter image description here

Aby uzyskać więcej informacji, zapoznaj się z dokumentacją Fragment

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

trzeba użyć onAttach metodę: na Fragment dialogowym

+0

show() przy czym sposób jest nazywane pierwszym i getActivity() jest zerowa. Więc jak mogę uzyskać kontekst? – ralphgabb

0

wykorzystanie takich jak ten:

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 (Aktywność aktywności) jest wycofana

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


zastosowanie onAttach (kontekst kontekstu) zamiast

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