这个问题是关于管理SQLiteDatabase的小更改的有效和适当的方法。出于讨论目的,我们可以查看this code,我已在此总结:
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) {
方案如下:应用程序的用户采取一些操作,需要在数据库中的某个记录上翻转一下。在该操作的侦听器中,可以轻松更改数据库中的一条记录,并确保视图随更改一起更新。但我的光标不再同步。我解决的问题&#34;问题是重新查询数据库并交换生成的新游标。但这似乎是用锤子杀死一只苍蝇。我希望通过RecyclerView.notifyDataSetChanged()
方法获得一些魔法,但它没有做任何事情。
因此,如果Cursor
加载了数据并进行了少量更改,那么再次运行查询,获取新的Cursor
并交换它,还是有更好的方法是否有效且合适?
答案 0 :(得分:0)
虽然再次运行完整查询的想法似乎效率低下,但this example on github可用于检查重新查询大量记录的影响。在主列表活动的onCreate()
中,您可以在repository.insertSome(n);
中添加大量数字。对于1000条记录等,将n设置为40左右
现在,当用户对其中一条记录(长按)执行操作时,将更新数据库,模型和视图,并通过重新查询创建新光标。虽然数据库中有很多记录,但查询似乎没有使用太多资源(即它似乎响应很快)。