这个问题是关于管理对SQLiteDatabase的小改动的一种高效且适当的方式。对于disucssion目的,我们可以看看this code,我已经总结如下:如何使用光标支持RecyclerView时管理更新的SQLite数据
CursorRecyclerViewAdapter.java
public abstract class CursorRecyclerViewAdapter<VH extends RecyclerView.ViewHolder> extends RecyclerView.Adapter<VH> {
public CursorRecyclerViewAdapter(Context context, Cursor cursor) {
public Cursor getCursor() {
public int getItemCount() {
@Override public long getItemId(int position) {
@Override public void setHasStableIds(boolean hasStableIds) {
public abstract void onBindViewHolder(VH viewHolder, Cursor cursor);
@Override public void onBindViewHolder(VH viewHolder, int position) {
public void changeCursor(Cursor cursor) {
public Cursor swapCursor(Cursor newCursor) {
private class NotifyingDataSetObserver extends DataSetObserver {
@Override public void onChanged() {
@Override public void onInvalidated() {
MyListCursorAdapter.java
public class MyListCursorAdapter extends CursorRecyclerViewAdapter<MyListCursorAdapter.ViewHolder>{
public MyListCursorAdapter(Context context,Cursor cursor){
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View view) {
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@Override public void onBindViewHolder(ViewHolder viewHolder, Cursor cursor) {
的场景如下:的应用程序的用户需要在数据库中的某条记录上进行一些操作。在该动作的监听器中,可以很容易地更改数据库中的一条记录,并确保视图随更改而更新。但是我的光标不再同步。我已经“解决”了问题的方式是重新查询数据库并交换所产生的新游标。但是,这似乎是用锤子杀死一只苍蝇。我希望从RecyclerView.notifyDataSetChanged()
方法中获得一些魔法,但它没有做任何事情。
因此,给定一个Cursor
加载数据和一个小的改变,它是有效和适当的再次运行查询,得到一个新的Cursor
并交换它,或者有更好的方法吗?
答案在这里:https://stackoverflow.com/questions/7973607/android-can-you-update-a-cursor-for-sqlite-results表示游标无法更新,但内容提供商具有该功能。问题是,内容提供商应该在*应用程序之间使用,而不是在它们之间。 – Dale