在RecyclerView.Adapter中实现一个观察者模式来检测SQLite更改,并使用notifyDataSetChanged()或notifyItemRangeChanged()刷新RecyclerView。
以下是示例代码:
首先,在RecyclerView.Adapter中添加观察者模式:
public class MyAdapter extends RecyclerView.Adapter {
private ArrayList dataList;
// 添加观察者模式
private ContentObserver observer = new ContentObserver(new Handler()) {
@Override
public void onChange(boolean selfChange) {
reloadData();
}
};
public MyAdapter(Context context) {
dataList = loadDataFromSQLite();
// 注册ContentObserver
context.getContentResolver().registerContentObserver(
MyContentProvider.CONTENT_URI, true, observer);
}
private ArrayList loadDataFromSQLite() {
// 从SQLite中加载数据
}
private void reloadData() {
dataList = loadDataFromSQLite();
notifyDataSetChanged();
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
// 绑定数据到ViewHolder中
}
@Override
public int getItemCount() {
return dataList.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
// ViewHolder中的控件
}
}
然后,在SQLite数据更改时,通过ContentResolver通知观察者:
// 在SQLite中更新数据
getContentResolver().update(MyContentProvider.CONTENT_URI, values, selection, selectionArgs);
// 通知观察者
getContext().getContentResolver().notifyChange(MyContentProvider.CONTENT_URI, null);
这样,数据库更改后RecyclerView就会自动更新。