Ich habe eine benutzerdefinierte Listenansicht mit einem benutzerdefinierten Adapter erstellt, der aus der Datenbank geladen wurde. Ich kann meine Listenansicht nicht aktualisieren, wenn sich die Daten aus der Datenbank geändert haben. Ich habe bereits versucht, notifysetdatachange() zu verwenden, aber es hat nicht funktioniert. Vielleicht liegt es daran, dass ich den Code falsch geschrieben habe. Bitte helfen Sie mir, dieses Problem zu lösen. Vielen Dank.Wie aktualisiert man Listenansicht in einem benutzerdefinierten Adapter?
ContactActivity.java
public void getImages2(){
class GetImages2 extends AsyncTask<Void,Void,Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected void onPostExecute(Void v) {
super.onPostExecute(v);
loading.dismiss();
customList = new CustomList(ContactActivity.this,GetAlImages2.imageURLs,GetAlImages2.bitmaps,GetAlImages2.code,GetAlImages2.name,GetAlImages2.phone,GetAlImages2.email);
listView.setAdapter(customList);
customList.notifyDataSetChanged();
}
@Override
protected Void doInBackground(Void... voids) {
try {
getAlImages2.getAllImages2();
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
}
GetImages2 getImages = new GetImages2();
getImages.execute();
}
CustomList.java
public class CustomList extends ArrayAdapter<String> {
private Bitmap[] bitmaps;
private String[] urls;
private String[] code;
private String[] name;
private String[] email;
private String[] phone;
private Activity context;
public CustomList(Activity context, String[] urls, Bitmap[] bitmaps, String[] code, String[] name, String[] phone, String[] email) {
super(context, R.layout.activity_contact_item, urls);
this.context = context;
this.urls= urls;
this.bitmaps= bitmaps;
this.code= code;
this.name= name;
this.phone= phone;
this.email = email;
}
}
[EDIT]
Endlich habe ich die Lösung meines Problems gefunden. Meine Listenansicht sollte zuerst überprüft haben, ob der Adapter der Listenansicht leer ist oder nicht. Ich habe diesen Code zu meinem onPostExecute hinzugefügt. Danke für deine Hilfe.
customList = new CustomList(ContactActivity.this,GetAlImages2.imageURLs,GetAlImages2.bitmaps,GetAlImages2.code,GetAlImages2.name,GetAlImages2.phone,GetAlImages2.email);
if(listView.getAdapter() == null){ //Adapter not set yet.
listView.setAdapter(customList);
}
else{ //Already has an adapter
listView.setAdapter(customList);
customList.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
}
die Daten zur Listenansicht oder nicht einstellen ?? –