0

Ich möchte die List eines ListFragment aktualisieren. Deshalb habe ich eine Methode in meinem ListFragment:Android - Kontext in ListFragment funktioniert nicht, wenn von AsyncTask in anderen Aktivität aufgerufen

public void setAdapter(List<String> valueList) { 
    ArrayAdapter adapter = new ArrayAdapter<String>(ctx, android.R.layout.simple_list_item_1, valueList); 
    setListAdapter(adapter); 
    adapter.notifyDataSetChanged(); 
} 

Und in meinem Activity habe ich ein AsyncTask, wo ich die Methode aufrufen, oben in onPostExecute:

@Override 
    protected void onPostExecute(ArrayList<String> valueList) { 
     OtherClass otherClasst = new OtherClass(); 

     otherclass.setAdapter(valueList); 
    } 

Alles sollte gut funktionieren. Die valueList ist nicht leer oder sowas und auch die onPostExecute wird aufgerufen.

So jetzt mein Problem ist, dass wenn ich die Context ctx im onCreate Methode meiner ListFragment initialisieren ich ein NullPointerException bekommen. Wenn ich es in meiner setAdapter Methode mit ctx = getActivity initialisiere, bekomme ich den gleichen Fehler. Das einzige, was ich tun kann, ist, die context der Klasse mit der AsyncTask zu bekommen, aber dann wird nichts in der App angezeigt.

Also wie bekomme ich das zum Funktionieren?

+0

stellen Sie den Adapter in onViewCreated-Methode des Fragments – dex

+2

Was ist 'OtherClass' und warum erstellen Sie ein neues? –

+1

Sie müssen die aktuelle Instanz von ListFragment aktualisieren. Wenn Ihr Listenfragment OtherClass heißt, müssen Sie zuerst die aktuelle Instanz abrufen und diese mit der oben genannten setAdapter-Methode aktualisieren. – Neil

Antwort

1

Da Sie setAdapter von onPostExecute von AsyncTask anrufen, dann activity könnte zerstört und sein kann, warum Sie null Kontext bekommen getActivity durch den Aufruf.

initialisieren adapter (es global machen) außerhalb setAdapter kann in onCreateView Verfahren von Fragment so aussehen:

adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, valueList); 

Und onPostExecute von AsyncTask nur die valueList aktualisieren und rufen adapter.notifyDataSetChanged()

+0

Dies funktioniert nicht. Beacause aus irgendeinem Grund ruft adapter.notifyDataSetChanged() auch eine Null-Zeiger-Ausnahme. Ist es erwähnenswert, dass sich das ListFragment in der Aktivität befindet, die die Methode setAdapter aufruft? –

+0

@ derkaländer Wie geht es dir? poste den Code –