В моем приложении есть база данных SqlLite с таблицей, содержащей список сообщений. У каждого сообщения есть «отправитель» и «тело».
У меня есть действие, содержащее ListView
, которое просто отображает все сообщения в базе данных с помощью курсора и адаптера курсора. Вот соответствующий код:
Cursor cursor = mDbAdapter.fetchAllMessages();
String[] from = { MessageDbAdapter.KEY_SENDER, MessageDbAdapter.KEY_BODY };
int[] to = { R.id.TextSender , R.id.TextMessage };
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, R.layout.messagerow, cursor, from, to);
mMessageList.setAdapter(adapter);
В моем приложении в фоновом режиме работает служба, которая может вставлять новые сообщения в базу данных в любое время (пользователь может или не может просматривать активность списка).
Мой вопрос заключается в следующем: если пользователь просматривает активность списка и в базу данных добавляется новое сообщение, как я могу заставить ListView
отразить это изменение (отобразить только что добавленное сообщение)
Я подумал о том, чтобы служба запускала широковещательную рассылку, когда сообщение было добавлено в базу данных. Затем, когда активность получит эту широковещательную рассылку, выполните запрос еще раз. Однако я опасаюсь, что fetchAllMessages()
неэффективно, когда я знаю, что было добавлено только 1 сообщение, тем более что сообщения могут добавляться часто.