簡體   English   中英

從recyclerview內的sqlite數據庫中刪除一行

[英]Delete a row from sqlite database inside a recyclerview

我有一個記事本應用程序,將注釋存儲在sqlite數據庫中,並在recyclerview中顯示它們。 我的回收者視圖中有一個可繪制對象,我想通過單擊它來刪除數據庫行。 使用我編寫的代碼,當我單擊圖像時,recycleview項目消失了,但是當我再次打開應用程序時,筆記仍然存在。 我不知道如何刪除它。 這是我的代碼:

public class ModelRs {
private String title;
private String content;
int id ;

public void setId(int id) {
    this.id = id;
}

public int getId() {
    return id;
}

這是我的Databasehelper類以及insert和delete方法

public void insert(ModelRs modelRs) {
    ContentValues values = new ContentValues();
    values.put(c_title, modelRs.getTitle());
    values.put(c_content, modelRs.getContent());
    values.put(c_id,modelRs.getId());

    try {
        this.getWritableDatabase().insert(t_name, null, values);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

public List<ModelRs> list() {
    List<ModelRs> list = new ArrayList<>();

    Cursor c = this.getWritableDatabase().query(t_name, new String[]{c_id, c_title, c_content}, null, null, null, null, null);

    if (c.moveToFirst()) {
        do {
            ModelRs modelRs = new ModelRs();
            modelRs.setTitle(c.getString(c.getColumnIndex(c_title)));
            modelRs.setContent(c.getString(c.getColumnIndex(c_content)));

            list.add(modelRs);
        } while (c.moveToNext());
    }
    return list;
}



public void delete(int id) {
    SQLiteDatabase sqLiteDatabase = getWritableDatabase();
    sqLiteDatabase.delete(t_name, c_id + "=" + id, null) ;
}
}

這是我的recyclerview適配器。 點擊偵聽器方法中的圖像在視圖持有人類中

@Override
public void onBindViewHolder(AdapterRs.ViewHolderMain holder, final int position) {
    final ModelRs model = modelRs.get(position);
    holder.TextView_title.setText(model.getTitle());
    holder.TextView_content.setText(model.getContent());

}


class ViewHolderMain extends RecyclerView.ViewHolder{
    private TextView TextView_title;
    private TextView TextView_content;
    private ImageView ImageDelete ;
    int id;
    public ViewHolderMain(View itemView) {
        super(itemView);
        TextView_title=itemView.findViewById(R.id.TextView_title);
        TextView_content=itemView.findViewById(R.id.TextView_content);
        ImageDelete = itemView.findViewById(R.id.deleteicon) ;
        itemView.setClickable(true);
        ImageDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                id = getAdapterPosition() ;
                mydatabase = new DataBaseHelper(context) ;
                mydatabase.delete(id);
                modelRs.remove(id) ;
                notifyItemRemoved(id);
                notifyDataSetChanged();

            }
        });
    }
}

我是SQLite數據庫的新手。 如果可以,請你幫助我

您必須在viewholder類上編寫onClick事件。 在您的情況下為“ ViewHolderMain”。 你必須把

itemView.setClickable(true);

在ViewHolderMain構造函數上。 那么您只需編寫點擊事件。

ImageDelete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Your delete method 
            }
        });

從sqlite刪除項目后,您必須添加

notifyDataSetChanged();

也從視圖中刪除該項目..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM