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无法正常工作

Flutter 插件:将数据从 Android BroadcastReceiver 发送到 Flutter 代码

使用kotlin从android中的BroadcastReceiver类访问edittext