2014-02-06 2 views
0

У меня есть собственное представление списка, которое пополняется через адаптер массива.Android: Как обновить элемент внутри пользовательского списка.

Каждый элемент/строка содержит три кнопки и некоторые связанные текстовые элементы. Все элементы в строке описывают детали для устройства в облаке. Таким образом, данные извлекаются из облака, а затем заполняется список. Количество строк равно количеству устройств.

Все было в порядке, пока я не добавил функцию периодического обновления элементов. Проблема в том, что после каждого периодического обновления она записывает данные для устройства в неправильную строку. Я попробовал два способа обновить каждую строку.

  1. Я держал карту для (DeviceID и зрения), а затем на основе DeviceId я хотел бы получить вид и обновить его. Теперь это не сработало, поскольку представления повторно используются и, так как я прокручиваю вниз, в основном один и тот же вид повторно используется, как показывает новые данные. И , так что запись на карте предыдущего устройства написана с новым .

  2. Я попытался позвонить по телефону getView() и передать позицию, но также не работал.

Я понимаю, что представления повторно используются, поэтому нет способа точно узнать, какое представление связано с идентификатором устройства. Но могли бы некоторые помочь мне выяснить, как обновить правильный вид с правильными данными?

Спасибо.

+0

[Позиция для использования повторно используемого вида поможет вам] (http://www.lalit3686.blogspot.in/2012/06/today-i-am-going-to-show-how-to-deal .html) –

ответ

0

Если вы используете шаблон Holder, то есть способ сделать это.

Шаг 1: Добавьте один атрибут т.е. положение к держателю.

private class ViewHolder { 
     .... 
     .... 
     int position; 
} 

Шаг 2: Инициализировать положение держателя в GetView()

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    if (convertView == null) {    
      ...    
      holder.position = position;  
    } 
.... 
} 

Шаг 3: положение Проверить владельца и значения положения представления. Если оба они одинаковы, выполняйте свою задачу.

if (mHolder.position == mPosition) { 
     // This is you required row. Do your task. 
} 

Read Async loading для более подробной информации.

+0

ok получил это ... но для обновления мне просто позвонить getItem() и указать позицию, которую я хочу обновить? как это работает – Sunny

+0

Какая задача выполнена с помощью getItem()? –

+0

Нет, я хочу обновить такие элементы, как checkbox и textviews внутри некоторой строки, основанной на позиции. SO, когда я хочу сделать это, просто позвоню getItem() для этой позиции – Sunny

Смежные вопросы