简体   繁体   中英

android refresh listview from broadcastreceiver

My app contains a ListView in an activity and a BroadcastReceiver . I would like my Broadcastreceiver to refresh the ListView when it is triggered. My receiver puts content into an sqlite DB and my listview displays the content of that DB.

Activity with ListView:

lv=(ListView) findViewById(R.id.conversation);
lv.setSelection(lv.getCount()-1);
lv.setAdapter(new mAdapter(this, srsList, messagesList, timesList, numbersList, idList));
registerForContextMenu(lv);

BroadcastReceiver:

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

You can create a BroadcastReciever in your activity which holds the adapter and notify that the the adapter should be refreshed :

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();
        }
    }
};

Reigester this BroadcastReciever in onResume:

this.registerReceiver(mMessageReceiver, new IntentFilter("some_unique_name"));

And unregiester onPause:

this.unregisterReceiver(mMessageReceiver);

In your BroadcastReciever just use:

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);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM