Получить позицию элемента ListView по URI / по данным, которые он содержит - PullRequest
0 голосов
/ 08 ноября 2019

У меня есть ListView, который я заполняю с помощью пользовательского CursorAdapter. Теперь я хочу вручную обновить только один конкретный элемент в ListView. У меня есть URI содержимого этого элемента. Можно ли использовать только эту информацию, чтобы получить позицию элемента в listView? Если у меня есть позиция, я могу сделать что-то вроде

View v = mListView.getChildAt(itemPosition - mListView.getFirstVisiblePosition());

, чтобы обновить вид. Но как я могу получить itemPosition?

Я знаю, что я получаю позицию в onItemClickListener, но мне нужно обновить представление без щелчка.

Любая помощь, ребята?

1 Ответ

1 голос
/ 08 ноября 2019

ListView не поддерживает обновление одной позиции.

Вы должны обновить адаптер новыми данными (даже если вы изменили одну позицию) и, вызовите mAdapter.notifyDataSetChanged()

Если вы получите View по его позиции (через listView.getChildAt()) будет работать. Однако, если вы прокрутите список вверх и вниз, в этом представлении снова отобразятся старые данные, поскольку адаптер не знает об изменении (и именно адаптер обновляет представление контекста представления getView()).

Когда вы вызываете notifyDataSetChanged(), вы сообщаете адаптеру, что в вашем наборе данных есть новая информация, и ListView/Adapter перерисовывает видимые элементы (он не перерисовывает весь список сразу ... только видимыеitems).

Возможно, вы захотите изменить на RecyclerView в будущем. BaseAdapter, используемый в RecyclerView вспомогательных действиях, таких как добавление / удаление / обновление одной позиции.

...