android从broadcastreceiver刷新listview
Posted
技术标签:
【中文标题】android从broadcastreceiver刷新listview【英文标题】:android refresh listview from broadcastreceiver 【发布时间】:2016-01-17 03:45:19 【问题描述】:我的应用在一个活动中包含一个ListView
和一个BroadcastReceiver
。我希望我的Broadcastreceiver
在触发时刷新ListView
。我的接收器将内容放入一个 sqlite 数据库,我的listview
显示该数据库的内容。
使用 ListView 的活动:
lv=(ListView) findViewById(R.id.conversation);
lv.setSelection(lv.getCount()-1);
lv.setAdapter(new mAdapter(this, srsList, messagesList, timesList, numbersList, idList));
registerForContextMenu(lv);
广播接收者:
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues values = new ContentValues();
//values.put(Messages.KEY_ID, i1);
values.put(Messages.KEY_sr, "r");
values.put(Messages.KEY_message, message);
values.put(Messages.KEY_time, datetime);
values.put(Messages.KEY_number, sen);
// Inserting Row
long student_Id = db.insert(Messages.TABLE, null, values);
db.close(); // Closing database connection
【问题讨论】:
【参考方案1】:您可以在包含适配器的 Activity 中创建一个 BroadcastReciever 并通知应刷新适配器:
private BroadcastReceiver mMessageReceiver = new BroadcastReceiver()
@Override
public void onReceive(Context context, Intent intent)
// Extract data included in the Intent
// String message = intent.getStringExtra("message");
if (mAdapter!= null)
mAdapter.notifyDataSetChanged();
;
在 onResume 中重新注册此 BroadcastReciever:
this.registerReceiver(mMessageReceiver, new IntentFilter("some_unique_name"));
并且取消注册 onPause:
this.unregisterReceiver(mMessageReceiver);
在你的 BroadcastReciever 中使用:
private void updateYourActivity(Context context)
Intent intent = new Intent("some_unique_name");
// put whatever data you want to send, if any
// intent.putExtra("message", message);
// send broadcast
context.sendBroadcast(intent);
【讨论】:
以上是关于android从broadcastreceiver刷新listview的主要内容,如果未能解决你的问题,请参考以下文章
Android:从 BroadcastReceiver 事件发送 LocalBroadcastManager 的意图
无法从 Android 10 上的 BroadcastReceiver 开始活动
从 Android 中的 BroadcastReceiver 调用 Activity 方法
从最近的任务中删除应用程序时,Android静态BroadcastReceiver无法正常工作