Если я вызываю notifyDataSetChanged()
на пользовательский адаптер, связанный с моим ListView, все представления должны обновляться сами (getView()
будет вызываться). Теперь у меня есть BroadcastReceiver, который слушает событие. Когда событие срабатывает, ListView должен быть обновлен. Как я могу это достичь? Спасибо!Как обновить ListView от BroadcastReceiver?
ответ
Если обновить ListView из приемника вы будете иметь такой код:
BroadcastReceiver br;
public final static String BROADCAST_ACTION = "BROADCAST_ACTION";
br = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
//code refreshing...
}
};
IntentFilter intFilt = new IntentFilter(BROADCAST_ACTION);
registerReceiver(br, intFilt);
И вы называете это с кодом:
Intent intent = new Intent(BROADCAST_ACTION);
sendBroadcast(intent);
Если вам нужно обновление, чтобы быть еще одно действие вы просто необходимо добавить (после действия):
Intent intent = new Intent(BROADCAST_ACTION);
sendBroadcast(intent);
Не работает должным образом. Пожалуйста, уточните свой ответ. –
В соответствии с просьбой см. пример кода:
public interface OnDataUpdateListener {
void onDataAvailable(ArrayList<String> newDataList);
}
public class MyTestReceiver extends BroadcastReceiver {
public static final String DATA_LIST = "DATA_LIST";
private OnDataUpdateListener mDataUpdateListener = null;
public MyTestReceiver(OnDataUpdateListener dataUpdateListener) {
mDataUpdateListener = dataUpdateListener;
}
@Override
public void onReceive(Context ctx, Intent intent) {
// assuming data is available in the delivered intent
ArrayList<String> dataList = intent.getSerializableExtra(DATA_LIST);
if (null != mDataUpdateListener) {
mDataUpdateListener.onDataAvailable(dataList);
}
}
}
public class MyActivity extends FragmentActivity implements OnDataUpdateListener {
public static final String ACTION_DATA_UPDATE_READY = "ACTION_DATA_UPDATE_READY";
private MyTestReceiver mTestReceiver = null;
private <SomeAdapterClass> mAdapter = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
// other required initialization
mTestReceiver = new MyTestReceiver(this);
}
@Override
public void onResume() {
super.onResume();
if (null != mTestReceiver) {
registerReceiver(mTestReceiver, new IntentFilter(ACTION_DATA_UPDATE_READY));
}
}
void onDataAvailable(ArrayList<String> newDataList) {
// assuming you want to replace existing data and not willing to append to existing dataset
mAdapter.clear();
mAdapter.addAll(newDataList);
mAdapter.notifyDataSetChanged();
}
}
В коде, где ваши данные обновляется, выпалить сообщение сигнализации, что данные были изменены ... (Вы должны иметь доступ к любой деятельности или в контексте приложения, чтобы сделать это)
Intent intent = new Intent("ListViewDataUpdated");
LocalBroadcastManager.getInstance(context.sendBroadcast(intent));
Тогда просто поймать Загвоздка сообщение, используя следующий код в вашей деятельности, и скажите вашему ListAdapter обновить ...
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
myListAdapter.notifyDataSetChanged();
}
};
@Override
public void onResume(){
super.onResume();
LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("ListViewDataUpdated"));
myListAdapter.notifyDataSetChanged();//in case our data was updated while this activity was paused
}
@Override
protected void onPause() {
LocalBroadcastManager.getInstance(this).unregisterReceiver(mMessageReceiver);
super.onPause();
}
Кредит: адаптировано из Vogella
- 1. Как обновить ListView с помощью BroadcastReceiver?
- 2. Update Listview от Sms BroadcastReceiver
- 3. Как обновить (обновить) виджет ListView от активности?
- 4. Как обновить listview от AsyncTask
- 5. Обновить данные адаптера от внешнего BroadcastReceiver
- 6. Как обновить элемент управления ListView?
- 7. Обновление адаптера от BroadcastReceiver
- 8. андроид обновить listview от broadcastreciever
- 9. Как обновить TextView с помощью метода onReceive от BroadcastReceiver
- 10. Как обновить строку ListView от службы загрузки
- 11. Как обновить ListView от других видов деятельности
- 12. Как обновить listView от своего адаптера
- 13. Обновить список доступных сетей - BroadcastReceiver
- 14. Как сделать уведомление от BroadcastReceiver
- 15. Как BroadcastReceiver отличается от намерения
- 16. Как настроить Alertbox от BroadcastReceiver
- 17. Как обновить вкладку фрагмента из BroadcastReceiver?
- 18. Как обновить ListView динамически?
- 19. Как обновить список ListView?
- 20. C# Как обновить ListView
- 21. Как обновить ListView динамически?
- 22. Как обновить ListView?
- 23. как обновить ListView WampServer
- 24. Как обновить отключенный ListView
- 25. Запустить BroadCastReceiver От Activity
- 26. Стартовый сервис от BroadcastReceiver
- 27. Запуск службы от BroadcastReceiver
- 28. Начало деятельности от BroadcastReceiver
- 29. Обновление пользовательского интерфейса от BroadCastReceiver
- 30. Возвращаемое значение от BroadcastReceiver
«Теперь у меня есть BroadcastReceiver, который слушает событие» - что такое событие и как зарегистрирован «BroadcastReceiver» (манифест или «registerReceiver()»)? – CommonsWare
Привет, динамически зарегистрированный в Activity, который содержит ListView, событие ACTION_DOWNLOAD_COMPLETE из DownloadManager. – Angelo
в режиме onReceive of BroadcastReceiver вам необходимо: изменить базовые данные вашего пользовательского адаптера и вызвать notifyDataSetChanged или создать новый пользовательский адаптер и установить его в listview – Selvin