5

Es gibt eine similar question, wo die meisten Antworten zu verwenden, um den Kontext eines Fragments zu erhalten, aber wie eine Referenz auf die Aktivität/Kontext erhalten, wenn das Fragment gelöst ist (in diesem Fall getActivity() Null zurückgibt)?Kontext/Aktivität in losem Fragment erhalten?

Meine Situation ist, dass mein Fragment eine AsyncTask startet, die nach Abschluss die onSuccess() Methode meines Fragments aufruft. Aber die Methode onSuccess() meines Fragments benötigt einen Kontext, um eine Toast-Nachricht anzuzeigen oder um auf die gemeinsamen Einstellungen zuzugreifen. Gibt es also eine zuverlässige Möglichkeit, den Kontext zu erhalten? Eine Möglichkeit, die ich in Betracht ziehe, besteht darin, ein Context-Objekt in meinen AsyncTask-Konstruktor zu übergeben und es an meine oben erwähnte Callback-Methode onSuccess() zurückzuleiten - aber könnte dies zu einem Speicherleck führen?

(. NB - Es gibt eine Antwort here, die zeigt, wie die aktuelle Aktivität abrufen, aber auch hier bedarf es einen gültigen Kontext)

+0

haben Sie getApplicationContext() versucht? –

+1

onattach Methode wird zuerst aufgerufen, in dem Sie Aktivität reference erhalten, speichern Sie es und verwenden Sie es. – Dev

Antwort

2

Verwendung diesen in Ihrem Fragmente:

private Context context; 

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

dann Kontext verwenden wo Sie wollen

+0

Danke, aber besteht bei diesem Ansatz die Gefahr eines Speicherlecks? –

0

Sie sollten den Kontext nach dem Erstellen der Ansicht speichern, wenn Sie in Fragment eingeben.

Context context; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
      Bundle savedInstanceState) { 

     View rootView = inflater.inflate(R.layout.fragment_photos, container, false); 
     MainView = rootView; 
     context = getActivity().getApplicationContext(); 
     return rootView; 
    } 

Verwenden Sie diesen Kontext in Ihrem Fragment, wo immer Sie wollen.