2011-02-04 1 views
0

У меня есть ListActivity, который получает свои данные из запроса базы данных. У меня также есть пользовательский адаптер, который расширяет простой адаптер курсора.Android - обновление simpleCursorAdapter

Чтобы показать настроенный контент, я переопределил методы newView и bindView.

Каждого элемент зрения имеет:

  1. TextView, содержащий заголовок
  2. ImageView, содержащее количество звезд - изображение, показанное изменяется на основании значения, полученное из базы данных
  3. кнопки - The текстовые изменения кнопок на кликах (Favorite/Make Favorite) и запускает событие обновления базы данных.

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

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

Должен ли я разместить reQuery() в методе onClick кнопки? Если нет, куда его следует поместить?

ответ

0

Что так когда-либо адаптер вы используете должны иметь GetView метод .. Всякий раз, когда список прокручивается этот метод GetView был призван для всех ListItem в представлении. Убедитесь, что в методе getView. То, что представление генерируется динамически.


Он должен проверить на доступное или измененное значение.


для обновления списка без прокрутки ваших должно вызвать listView.getAdapter(). NotifyDataSetChanged()

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

Change ListView background - strange behaviour

Надеется, что это поможет :)

+0

спасибо, было очень полезно, это помогло мне решить некоторые другие проблемы, но я до сих пор имеет те же проблемы, т.е. адаптер не знает, что мнение изменилось , Это то, что делает мой код, изменение - это изменение базы данных - то есть элемент представления имеет встроенную кнопку, а нажатие кнопки изменяет значение в БД. Закрытие и повторное открытие активности показывает, что база данных правильно обновлена, но не в режиме реального времени. Мой класс активности расширяет ListActivity –

+0

Я также реализовал listView с кнопкой удаления, которая после нажатия удаляет данные строки из базы данных и listview, после этого обновляется. Я никогда не использую никаких действий, которые расширяют ListActivity. вместо этого я всегда вставляю представление списка в действие. Это личное предпочтение, но когда-то оно устраняет некоторые проблемы. – Javanator

0

Если у вас есть расширенный базовый адаптер, после изменения данных вызова, listView.setAdapter() и в getView(), обновите данные представления.

0

Используйте SetListAdapter с ArrayAdapter, чтобы отобразить список. Используйте ConvertView, чтобы избежать раздувания View.

if (convertView==null) 
{ 
    //inflate your list 
}