Ich weiß, dass ähnliche Fragen bereits gestellt wurden, aber es scheint keine endgültige Antwort auf die Aktualisierung einer Listview zu geben.Listview von Aysntask durch adapter.add nicht funktioniert
Ich versuche, eine Listview in der Benutzeroberfläche über eine asynctask mit Arrayadapter zu aktualisieren.
Ich versuche, die Werte zu dem Adapter hinzuzufügen, während kein Fehler angegeben wird, scheint es nicht zu funktionieren, da die Listenansicht leer bleibt.
Wenn ich das Array direkt in den Adapter eingeben, funktioniert es. Aber ich möchte dies durch eine asynctask für zukünftige Entwicklung tun.
Nicht sicher, ob es durch die Fortschrittsaktualisierung wie unten oder in der PostExecute getan werden sollte.
Hier ist der Code.
public class MainActivity extends AppCompatActivity {
ListView myList;
ArrayAdapter adapter;
private String[] names = {"Test1","Test2","Test3","Test4","Test5"};
//MAIN METHOD TO START PROGRAM
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myList = (ListView) findViewById(R.id.listView);
adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new ArrayList<String>());
myList.setAdapter(adapter);
new MyTask().execute();
}
class MyTask extends AsyncTask<Void, String, String> {
ArrayAdapter<String> adapter;
@Override
protected void onPreExecute() {
System.out.println("PreExecute Method Triggered");
adapter = (ArrayAdapter<String>)myList.getAdapter();
}
@Override
protected String doInBackground(String... params) {
for (String Name : names)
{
publishProgress(Name);
}
return "Values added";
}
@Override
protected void onProgressUpdate(String... values) {
adapter.add(values[0]);
System.out.println("OnProgress Method Triggered = " + values[0]);
}
@Override
protected void onPostExecute(String result) {
System.out.println("PostExecute Method Triggered" + result);
}
}
}
Hier ist mein Listview in meinem acivity_main.xml
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient_bg" />
Danke. Mir fehlte der letzte Befehl, aber ich fand auch eine andere Zeile, die meinen Code durcheinander brachte. Ich hatte eine this.recreate(); innerhalb der gleichen Methode, um den Bildschirm zu aktualisieren. Das löschte den Listview genau nach dem Auffüllen. – EtienneSW