Android RecyclerView和数据库,无法删除项目

Android RecyclerView和数据库,无法删除项目,android,database,sqlite,android-recyclerview,Android,Database,Sqlite,Android Recyclerview,好的,过去几天我一直在这个问题上兜圈子,找不到有效的解决办法,也许我不知道如何正确表达这个问题。但事情是这样的 我正在从事一个使用RecyclerView适配器的项目,该适配器用于从我的sqlite数据库加载和显示简单元素,其中包含一个字符串引号和对图像源的字符串引用。这部分工作正常,但我似乎无法删除任何项目 我已经检查了代码,确保只有在需要时才打开与我的数据库的连接,然后再关闭,这里不应该有任何问题 我实际上可以在单击某个元素时从Recyclerview适配器内部删除该项,但如果我退出并再次输

好的,过去几天我一直在这个问题上兜圈子,找不到有效的解决办法,也许我不知道如何正确表达这个问题。但事情是这样的

我正在从事一个使用RecyclerView适配器的项目,该适配器用于从我的sqlite数据库加载和显示简单元素,其中包含一个字符串引号和对图像源的字符串引用。这部分工作正常,但我似乎无法删除任何项目

我已经检查了代码,确保只有在需要时才打开与我的数据库的连接,然后再关闭,这里不应该有任何问题

我实际上可以在单击某个元素时从Recyclerview适配器内部删除该项,但如果我退出并再次输入,则已删除的项将再次加载。这就给我的数据库带来了问题,或者可能是一些类似于决斗班卓琴的问题,函数会重新创建一个删除的项。但是现在我已经遵循了很多次了,就我的一生而言,我似乎无法解决这个问题

在我的delete click事件中,我正在对我的数据库和我的recyclerview适配器运行一个删除调用,但问题仍然存在

我希望得到任何有助于我确定问题所在的信息。我不确定在这个问题中包括什么代码,我已经包括了我的RecyclerView适配器和数据库适配器。我知道在看不到代码的情况下回答这类问题几乎是不可能的,但仍然是

*请原谅我弄得一团糟。我已经尝试了很多东西

//回收视图适配器

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.DataObjectHolder>
{
    private ArrayList<Instance> instanceDataset;
    private theClickListener clickListener;
    public Context context;

    private DBAdapter db;
    private Button deleteButton;
    private int thePosition;


    public RecyclerViewAdapter(Context context)
    {
        this.context = context;
    }


// ViewHolder inner class


    class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener
    {
        CardView cv;
        TextView comment;
        ImageView imageViewLocalAdapter;


        public DataObjectHolder(final View itemView)
        {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cardview_layout);
            comment = (TextView) itemView.findViewById(R.id.cardview_textView);
            imageViewLocalAdapter = (ImageView) itemView.findViewById(R.id.cardview_imageView);

            deleteButton = (Button) itemView.findViewById(R.id.delete_button);
            //itemView.setOnClickListener(this);
        }

        // this here displays the position of item clicked
        @Override
        public void onClick(View v)
        {
            //Intent intent = new Intent(context, SingleInstanceFragment.class);

           // Log.d(" clicking ", "onClick " + getPosition());



            //clickListener.onTheGreatItemClick(getPosition(), v);
        }
    }



    public void setOnItemClickListener(theClickListener clickListener)
    {
        this.clickListener = clickListener;
    }

    public RecyclerViewAdapter(ArrayList<Instance> instanceDataSet, Context context)
    {
        this.instanceDataset = instanceDataSet;
        this.context = context;
    }

// THE VIEWHOLDER


    @Override
    public DataObjectHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
    {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
        DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
        return dataObjectHolder;
    }

    @Override
    public void onBindViewHolder(final DataObjectHolder holder, final int position)
    {
        final Instance inst = instanceDataset.get(position);
        openDB();
        thePosition = position;

        holder.comment.setText(inst.getComment());

        String middle = "/sdcard/unapp/";
        Uri uri = Uri.parse("file://" + middle + inst.getImage());

        Picasso.with(holder.imageViewLocalAdapter.getContext())
                .load(uri)
                .fit().centerCrop()
                .into(holder.imageViewLocalAdapter);

        final RecyclerView.ViewHolder reHolder = holder;

        holder.imageViewLocalAdapter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                deleteItem(position);
                Log.d("position in ", " RecyclerView Adapter " + position);
                onBindViewHolder(holder, position);
//                Intent intent = new Intent(context, SingleInstanceActivity.class);
//                intent.putExtra("position", position);
//
//                context.startActivity(intent);
            }

        });
    }

    public void addItem(Instance dataObj, int index)
    {
        instanceDataset.add(dataObj);
        notifyItemInserted(index);
    }

    public void deleteItem(int index)
    {
        Log.d("count", "deleteItem " +getItemCount());
        instanceDataset.remove(index);
        db.deleteRow(index);

        db.close();
        notifyItemRemoved(index);

        //new RecyclerViewAdapter(instanceDataset, context);

        Log.d("count", "deleteItem DEUX  " +getItemCount());
    }

    private void openDB()
    {
        db = new DBAdapter(this.context);
        db.open();
    }


    @Override
    public int getItemCount()
    {
        return instanceDataset.size();
    }



    public Instance getItem(int position)
    {
        return instanceDataset.get(position);
    }

//  clicklistener interface

    public interface theClickListener
    {
        void onTheGreatItemClick(int position, View v);

    }
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter
{
私有ArrayList instanceDataset;
私有的clickListener clickListener;
公共语境;
专用数据库适配器数据库;
私人按钮删除按钮;
私人的位置;
公共RecycleServiceAdapter(上下文)
{
this.context=上下文;
}
//ViewHolder内部类
类DataObjectHolder扩展了RecyclerView.ViewHolder实现了View.OnClickListener
{
卡德维尤简历;
文本视图评论;
ImageView imageViewLocalAdapter;
公共数据对象持有者(最终视图项视图)
{
超级(项目视图);
cv=(CardView)itemView.findViewById(R.id.CardView\u布局);
comment=(TextView)itemView.findViewById(R.id.cardview\u TextView);
imageViewLocalAdapter=(ImageView)itemView.findViewById(R.id.cardview\u ImageView);
deleteButton=(Button)itemView.findViewById(R.id.delete_按钮);
//setOnClickListener(这个);
}
//此处显示单击的项目的位置
@凌驾
公共void onClick(视图v)
{
//意向意向=新意向(上下文,SingleInstanceFragment.class);
//d(“单击”、“onClick”+getPosition());
//单击Listener.onSegreatitemclick(getPosition(),v);
}
}
public void setOnItemClickListener(clickListener clickListener)
{
this.clickListener=clickListener;
}
公共RecycleServiceAdapter(ArrayList instanceDataSet,上下文)
{
this.instanceDataset=instanceDataset;
this.context=上下文;
}
//持票人
@凌驾
public DataObjectHolder onCreateViewHolder(ViewGroup ViewGroup,int viewType)
{
View-View=LayoutFlater.from(viewGroup.getContext())。充气(R.layout.cardview,viewGroup,false);
DataObjectHolder DataObjectHolder=新的DataObjectHolder(视图);
返回数据对象持有者;
}
@凌驾
public void onBindViewHolder(最终DataObjectHolder,最终int位置)
{
最终实例inst=instanceDataset.get(位置);
openDB();
位置=位置;
holder.comment.setText(inst.getComment());
字符串middle=“/sdcard/unpp/”;
Uri=Uri.parse(“文件:/”+middle+inst.getImage());
Picasso.with(holder.imageViewLocalAdapter.getContext())
.load(uri)
.fit().centerCrop()中的
.into(holder.imageViewLocalAdapter);
final RecyclerView.ViewHolder reHolder=支架;
holder.imageViewLocalAdapter.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
删除项目(位置);
Log.d(“位置在”,“再循环视图适配器”+位置);
onBindViewHolder(支架,位置);
//意向意向=新意向(上下文,SingleInstanceActivity.class);
//意图。额外(“位置”,位置);
//
//背景。开始触觉(意图);
}
});
}
公共void附加项(实例dataObj,int索引)
{
instanceDataset.add(dataObj);
插入的项目(索引);
}
公共void deleteItem(int索引)
{
Log.d(“count”、“deleteItem”+getItemCount());
instanceDataset.remove(索引);
db.deleteRow(索引);
db.close();
删除的项目(索引);
//新的RecycleServiceAdapter(instanceDataset,上下文);
Log.d(“count”、“deleteItem DEUX”+getItemCount());
}
私有void openDB()
{
db=新的DBAdapter(this.context);
db.open();
}
@凌驾
public int getItemCount()
{
返回instanceDataset.size();
}
公共实例getItem(int位置)
{
返回instanceDataset.get(位置);
}
//单击侦听器界面
公共接口ClickListener
{
在隔离点单击时无效(int位置,视图v);
}
}
//数据库适配器

    public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.DataObjectHolder>
{
    private ArrayList<Instance> instanceDataset;
    private theClickListener clickListener;
    public Context context;

    private DBAdapter db;
    private Button deleteButton;
    private int thePosition;


    public RecyclerViewAdapter(Context context)
    {
        this.context = context;
    }


// ViewHolder inner class


    class DataObjectHolder extends RecyclerView.ViewHolder implements View.OnClickListener
    {
        CardView cv;
        TextView comment;
        ImageView imageViewLocalAdapter;


        public DataObjectHolder(final View itemView)
        {
            super(itemView);
            cv = (CardView) itemView.findViewById(R.id.cardview_layout);
            comment = (TextView) itemView.findViewById(R.id.cardview_textView);
            imageViewLocalAdapter = (ImageView) itemView.findViewById(R.id.cardview_imageView);

            deleteButton = (Button) itemView.findViewById(R.id.delete_button);
            //itemView.setOnClickListener(this);
        }

        // this here displays the position of item clicked
        @Override
        public void onClick(View v)
        {
            //Intent intent = new Intent(context, SingleInstanceFragment.class);

           // Log.d(" clicking ", "onClick " + getPosition());



            //clickListener.onTheGreatItemClick(getPosition(), v);
        }
    }



    public void setOnItemClickListener(theClickListener clickListener)
    {
        this.clickListener = clickListener;
    }

    public RecyclerViewAdapter(ArrayList<Instance> instanceDataSet, Context context)
    {
        this.instanceDataset = instanceDataSet;
        this.context = context;
    }

// THE VIEWHOLDER


    @Override
    public DataObjectHolder onCreateViewHolder(ViewGroup viewGroup, int viewType)
    {
        View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.cardview, viewGroup, false);
        DataObjectHolder dataObjectHolder = new DataObjectHolder(view);
        return dataObjectHolder;
    }

    @Override
    public void onBindViewHolder(final DataObjectHolder holder, final int position)
    {
        final Instance inst = instanceDataset.get(position);
        openDB();
        thePosition = position;

        holder.comment.setText(inst.getComment());

        String middle = "/sdcard/unapp/";
        Uri uri = Uri.parse("file://" + middle + inst.getImage());

        Picasso.with(holder.imageViewLocalAdapter.getContext())
                .load(uri)
                .fit().centerCrop()
                .into(holder.imageViewLocalAdapter);

        final RecyclerView.ViewHolder reHolder = holder;

        holder.imageViewLocalAdapter.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {


                deleteItem(position);
                Log.d("position in ", " RecyclerView Adapter " + position);
                onBindViewHolder(holder, position);
//                Intent intent = new Intent(context, SingleInstanceActivity.class);
//                intent.putExtra("position", position);
//
//                context.startActivity(intent);
            }

        });
    }

    public void addItem(Instance dataObj, int index)
    {
        instanceDataset.add(dataObj);
        notifyItemInserted(index);
    }

    public void deleteItem(int index)
    {
        Log.d("count", "deleteItem " +getItemCount());
        instanceDataset.remove(index);
        db.deleteRow(index);

        db.close();
        notifyItemRemoved(index);

        //new RecyclerViewAdapter(instanceDataset, context);

        Log.d("count", "deleteItem DEUX  " +getItemCount());
    }

    private void openDB()
    {
        db = new DBAdapter(this.context);
        db.open();
    }


    @Override
    public int getItemCount()
    {
        return instanceDataset.size();
    }



    public Instance getItem(int position)
    {
        return instanceDataset.get(position);
    }

//  clicklistener interface

    public interface theClickListener
    {
        void onTheGreatItemClick(int position, View v);

    }
}
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter
{
私有ArrayList instanceDataset;
私有的clickListener clickListener;