Как обновить ListView в случае изменения значения базы данных? - PullRequest
3 голосов
/ 22 мая 2011

В настоящее время я делаю следующее:

1) база данных связана с ListView:

String[] from = new String[]{DbAdapter.KEY_TITLE, 
                DbAdapter.KEY_DISPLAYED_VALUE,
                DbAdapter.KEY_FAVORITE};
int[] to = new int[]{R.id.name, R.id.time, R.id.icon};
items = new SimpleCursorAdapter(this, R.layout.row, itemsCursor, from, to);

2) KEY_DISPLAYED_VALUE изменяется каждые 2 секунды в базе данных.Тогда items.notifyDataSetChanged() называется.Но данные на экране не обновляются (R.id.time равно TextView в настоящее время, будет TextSwitcher, как только этот код сработает).

База данных обновлена ​​с помощью execSQL .

Ответы [ 2 ]

3 голосов
/ 22 мая 2011

Ну, это потому, что данные в вашем курсоре не меняются.самая простая вещь в вашей ситуации - это вызов нового запроса и изменение курсора списка каждый раз, когда вы обновляете какое-либо значение в вашей базе данных (возможно, есть способ уведомления через широковещательные рассылки или что-то в этом роде).Другой способ заключается в регистрации URI уведомления на курсоре с помощью запроса (см. пример проекта «Блокнот» от Android о создании поставщика контента, в частности, метода вставки.

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

Надеюсь, это поможет, счастливое кодирование.

2 голосов
/ 22 мая 2011

Вот объяснение того, как использовать notifyDataSetChanged () и почему ваш пример не работает:

notifyDataSetChanged пример

...