Я сделал собственное listview с пользовательским адаптером, который заполнен из базы данных. Я не могу обновлять свой список при каждом изменении данных из базы данных. Я уже пробовал использовать notifysetdatachanged(), но это не сработало. Может быть, это потому, что я неправильно сформулировал код. Пожалуйста, помогите мне решить эту проблему. Благодарю.Как обновить список в пользовательском адаптере?
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]
Наконец-то я нашел решение своей проблемы. Сначала мне нужно было проверить, не является ли адаптер listview пустым или нет. Я добавил этот код в свой onPostExecute. Спасибо за вашу помощь.
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();
}
данные настройки в ListView или нет ?? –