У меня возникла проблема с notifyOnDataSetChanged().
Я могу получить представление в виде списка для загрузки новых данных, создав новый CustomAdapter, но не используя notifyOnDataSetChanged ().Работает и настраивается новый пользовательский адаптер, но 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);
}
}
);
UPDATE: @ ответ САБИХ работал. На основе ответов от @Sabeeh и @ViniciusRodriguesLima ниже, я должен был изменить свой CustomAdapter.java следующим образом ссылаться на переменную list
(в дополнение к добавлению метода обновления()):
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 not working from custom adapter
- notifyDataSetChanged not working
- Android: notifyDataSetChanged(); not working
- Следуя инструкциям на верхнем проголосовали ответ, используя
adapter.clear()
, кажется, очистить мойarrayList
, так что к тому времени я использую notifyOnDataSetChanged(), тоarrayList
пуст)
- Следуя инструкциям на верхнем проголосовали ответ, используя
Любая помощь будет быть оцененным.
отправьте код адаптера, и вы должны обновить список в адаптере, а затем позвонить notifyDataSetChanged() – Sabeeh