Android: Можно ли обновить только один элемент в списке?

Мне интересно, можно ли переименовать только один элемент в списке? Я предполагаю, что, вызвав notifyDatasetChanged() вы должны удалить весь список?

Благодаря,

Вы можете, но это немного запутанно. Вам нужно будет получить индекс первого видимого элемента в списке, а затем использовать его, чтобы решить, как далеко вниз в списке визуальных элементов элемент нуждается в обновлении, затем захватите его представление и обновите его там.

Гораздо проще просто вызвать notifyDatasetChanged() .

Вы не можете сделать (обновить) одну строку, но вместо этого вы можете получить запрошенное представление и сделать chages на нем напрямую, вызвав yourListView.getChildAt(int VisiblePosition); Где visiblePostion – это позиция в ListView минус yourListView.getFirstVisiblePosition()

Как это :

  View v = listViewItems.getChildAt(position - listViewItems.getFirstVisiblePosition()); v.setBackgroundColor(Color.GREEN); 

Надеюсь, это поможет…

Также вы можете использовать это:

 myListView.invalidateViews(); 
 dataAdapter.remove(dataAdapter.getItem(clickedpos)); dataAdapter.insert(t.getText().toString(), clickedpos); 

Вот как я это сделал:

Ваши элементы (строки) должны иметь уникальные идентификаторы, чтобы впоследствии их можно было обновить. Установите метку каждого вида, когда список получает представление из адаптера. (Вы также можете использовать ключевой тег, если тег по умолчанию используется где-то еще)

 @Override public View getView(int position, View convertView, ViewGroup parent) { View view = super.getView(position, convertView, parent); view.setTag(getItemId(position)); return view; } 

Для обновления проверьте каждый элемент списка, если вид с указанным идентификатором есть, он отображается, и на нем должно быть выполнено обновление.

 private void update(long id) { int c = list.getChildCount(); for (int i = 0; i < c; i++) { View view = list.getChildAt(i); if ((Long)view.getTag() == id) { // update view } } } 

Это на самом деле проще, чем другие методы и лучше, когда вы имеете дело с идентификаторами не позиций! Также вы должны учитывать сценарий, когда ваше представление становится невидимым и видимым снова.

Вам необходимо отслеживать ваш адаптер (или пользовательский адаптер, если вы настроены на привлекательные функции). Когда вы меняете данные для элемента, просто измените интересующие вас поля в своем адаптере. Затем вызовите notifyDatasetChanged, и изменения будут отражены в вашем списке.

Обратите внимание, что этот подход работает точно так же и для Галереи.

Intereting Posts
ScrollView alawys прокручивается на дно Не удалось выбрать строку в списке в раскрывающемся списке 4.1, но работает в android 5.0 OpenGLRenderer, найден неверный глиф Как определить конец действия в Libgdx (0.9.7) android FAB из библиотеки поддержки дизайна не перемещается вверх, когда отображается закусочная Создание приложений для Android без Java Как узнать, когда виджет галереи перестает прокручиваться? Как игнорировать «Игнорировать атрибут InnerClasses» Предупреждение Lint Передавать данные другому фрагменту с помощью прокрутки с помощью вкладки android studio, а не кнопки Неверное изображение, отображаемое с помощью библиотеки Glide Как предотвратить автозаполнение Android Studio, удалив соседний токен Графика должна сохраняться, когда другая кнопка на операции нажата Как добавить (вертикальный) разделитель в горизонтальный LinearLayout? Есть ли способ импортировать 3D-модель в Android? Как создать плагин stagefright