У меня возникла проблема с notifyOnDataSetChanged().
. Я могу заставить свое представление списка загружать новые данные, создав новый CustomAdapter, но не используя notifyOnDataSetChanged().
private void repopulateListView(JSONObject resp) throws JSONException {
arrayList.clear();
List<MyObject> newArrayList = getData();
arrayList.addAll(newArrayList); //I've checked that arrayList contains new data
/* WORKS, new data is loaded in the list view */
adapter = new CustomAdapter(MainActivity.this, arrayList);
listView.setAdapter(adapter);
}
тогда как следующее не работает - представление списка не обновляется, оно просто остается таким, каким оно было до получения новых данных. Я проверил правильность извлечения новых данных.
private void repopulateListVIew(JSONObject resp) throws JSONException {
arrayList.clear();
List<MyObject> newArrayList = getData();
arrayList.addAll(newArrayList); //I've checked that arrayList contains new data
/* DOES NOT WORK, list view does not refresh with new data */
((BaseAdapter)adapter).notifyOnDataSetChanged();
}
Мой адаптер был определен так:
adapter = new CustomAdapter(MainActivity.this, arrayList);
listView = (ListView) findViewById(R.id.list_view);
listView.setAdapter(adapter);
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//additional code
startActivity(DetailsActivity);
}
}
);
ОБНОВЛЕНИЕ: ответ @Sabeeh сработал. Основываясь на ответах @Sabeeh и @ViniciusRodriguesLima ниже, мне пришлось отредактировать свой CustomAdapter.java следующим образом, чтобы сослаться на переменную list
(в дополнение к добавлению метода update()):
public class CustomAdapter extends ArrayAdapter<MyObject> {
private Context context;
private List<MyObject> list = new ArrayList<>(); //add this variable
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inf = LayoutInflater.from(getContext());
View customView = inf.inflate(R.layout.custom_beer_row, parent, false);
//final MyObject chosenObj = getItem(position); Changed to the statement below
final MyObject chosenObj = list.get(position); //this is CORRECT
...
}
Я пробовал предложения со следующих страниц безрезультатно:
- notifyDataSetChange не работает с пользовательским адаптером
- notifyDataSetChanged не работает
- Android: notifyDataSetChanged(); not working
- Following the instructions on the top-voted answer, using
adapter.clear()
seems to clear myarrayList
as well, so by the time I use notifyOnDataSetChanged(), thearrayList
is empty)
- Following the instructions on the top-voted answer, using
Любая помощь будет оценена по достоинству.