Android 从recyclerView单击中正确删除sqlite条目
我的应用程序在SQLite数据库中存储名称和结果,并在RecycleViewer中显示。以前我使用的是一个列表视图,在这里,我可以通过LongClick删除类似于此处的项目 现在我已经切换到recyclerView,我无法正确处理它。当我删除它时,它会消失,但当我重新加载片段时,删除的条目会再次出现。我假设它是因为该项仅从适配器中的列表中删除,但是如何从实际调用recylerViewer的片段中的列表中删除它呢 这是我的适配器: 公共类DatabaseAdapter扩展了RecyclerView.Adapter{ 列出dataModelArrayList; 语境Android 从recyclerView单击中正确删除sqlite条目,android,android-recyclerview,android-sqlite,Android,Android Recyclerview,Android Sqlite,我的应用程序在SQLite数据库中存储名称和结果,并在RecycleViewer中显示。以前我使用的是一个列表视图,在这里,我可以通过LongClick删除类似于此处的项目 现在我已经切换到recyclerView,我无法正确处理它。当我删除它时,它会消失,但当我重新加载片段时,删除的条目会再次出现。我假设它是因为该项仅从适配器中的列表中删除,但是如何从实际调用recylerViewer的片段中的列表中删除它呢 这是我的适配器: 公共类DatabaseAdapter扩展了RecyclerView
public DatabaseAdapter(List<DataModel> dataModelArrayList, Context context) {
this.dataModelArrayList = dataModelArrayList;
this.context = context;
}
class Myholder extends RecyclerView.ViewHolder implements CardView.OnLongClickListener {
TextView name, result;
public Myholder(View itemView) {
super(itemView);
name = (TextView) itemView.findViewById(R.id.card_name);
result = (TextView) itemView.findViewById(R.id.card_result);
CardView cardView = (CardView) itemView.findViewById(R.id.card_view);
cardView.setOnLongClickListener(this);
}
@Override
public boolean onLongClick(View v) {
new AlertDialog.Builder(context)
.setIcon(R.drawable.ic_warning_black_24dp)
.setTitle("Delete result")
.setMessage("Are you sure you want delete this result?")
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
/* This is where deletions should be handled */
int id = getAdapterPosition();
DataBHelper database = new DataBHelper(context);
database.deleteEntry(id);
dataModelArrayList.remove(id);
notifyItemRemoved(id);
notifyDataSetChanged();
database.close();
}
})
.setNegativeButton("No", null)
.show();
return true;
}
}
@Override
public Myholder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.row, null);
return new Myholder(view);
}
@Override
public void onBindViewHolder(Myholder holder, int position) {
DataModel dataModel = dataModelArrayList.get(position);
holder.name.setText(dataModel.getName());
holder.result.setText(dataModel.getResult());
}
@Override
public int getItemCount() {
return dataModelArrayList.size();
}}
公共数据库适配器(列出dataModelArrayList,上下文){
this.dataModelArrayList=dataModelArrayList;
this.context=上下文;
}
类Myholder扩展了RecyclerView.ViewHolder实现了CardView.OnLongClickListener{
文本视图名称、结果;
公共Myholder(查看项目视图){
超级(项目视图);
name=(TextView)itemView.findViewById(R.id.card\u name);
结果=(TextView)itemView.findViewById(R.id.card\u结果);
cardwiew cardwiew=(cardwiew)itemView.findviewbyd(R.id.card\u视图);
设置OnLongClickListener(此);
}
@凌驾
仅长按公共布尔值(视图v){
新建AlertDialog.Builder(上下文)
.setIcon(右可绘制ic警告黑色24dp)
.setTitle(“删除结果”)
.setMessage(“确实要删除此结果吗?”)
.setPositiveButton(“是”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
/*这就是应该处理删除的地方*/
int id=getAdapterPosition();
DataHelper数据库=新的DataHelper(上下文);
deleteEntry(id);
dataModelArrayList.remove(id);
已删除的项目(id);
notifyDataSetChanged();
close()数据库;
}
})
.setNegativeButton(“否”,null)
.show();
返回true;
}
}
@凌驾
public Myholder onCreateViewHolder(视图组父级,int-viewType){
View=LayoutInflater.from(parent.getContext()).flate(R.layout.row,null);
返回新的Myholder(视图);
}
@凌驾
公共无效onBindViewHolder(Myholder,int位置){
DataModel DataModel=dataModelArrayList.get(位置);
holder.name.setText(dataModel.getName());
result.setText(dataModel.getResult());
}
@凌驾
public int getItemCount(){
返回dataModelArrayList.size();
}}
这是:
public class DataBHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 2;
public static final String DATABASE_NAME = "results_database";
public static final String RESULTS_TABLE_NAME = "results_table";
public static final String RESULTS_COLUMN_ID = "_id";
public static final String RESULTS_COLUMN_NAME = "name";
public static final String RESULTS_COLUMN_RESULT = "result";
public DataBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
sqLiteDatabase.execSQL("CREATE TABLE " + RESULTS_TABLE_NAME + " (" +
RESULTS_COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
RESULTS_COLUMN_NAME + " TEXT, " +
RESULTS_COLUMN_RESULT + " TEXT" + ")");
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + RESULTS_TABLE_NAME);
onCreate(sqLiteDatabase);
}
public void saveToDB(String fname, String lname, String result) {
SQLiteDatabase database = getWritableDatabase();
ContentValues values = new ContentValues();
String name = fname + " " + lname;
values.put(DataBHelper.RESULTS_COLUMN_NAME, name);
values.put(DataBHelper.RESULTS_COLUMN_RESULT, result);
database.insert(DataBHelper.RESULTS_TABLE_NAME, null, values);
database.close();
}
public List<DataModel> readDB(){
List<DataModel> data=new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery("select * from "+RESULTS_TABLE_NAME+" ;",null);
StringBuffer stringBuffer = new StringBuffer();
DataModel dataModel = null;
while (cursor.moveToNext()) {
dataModel= new DataModel();
String name = cursor.getString(cursor.getColumnIndexOrThrow("name"));
String result = cursor.getString(cursor.getColumnIndexOrThrow("result"));
dataModel.setName(name);
dataModel.setResult(result);
stringBuffer.append(dataModel);
data.add(dataModel);
}
return data;
}
public void clearDatabase() {
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
String clearDBQuery = "DELETE FROM "+RESULTS_TABLE_NAME;
sqLiteDatabase.execSQL(clearDBQuery);
}
public void deleteEntry(long row) {
SQLiteDatabase sqLiteDatabase = getWritableDatabase();
sqLiteDatabase.delete(RESULTS_TABLE_NAME, RESULTS_COLUMN_ID + "=" + row, null);
}}
公共类DataBHelper扩展了SQLiteOpenHelper{
私有静态最终int数据库_VERSION=2;
公共静态最终字符串数据库\u NAME=“结果\u数据库”;
公共静态最终字符串RESULTS\u TABLE\u NAME=“RESULTS\u TABLE”;
公共静态最终字符串结果\u列\u ID=“\u ID”;
公共静态最终字符串结果\u列\u NAME=“NAME”;
公共静态最终字符串结果\u列\u RESULT=“RESULT”;
公共数据助手(上下文){
super(上下文、数据库名称、null、数据库版本);
}
@凌驾
public void onCreate(SQLiteDatabase SQLiteDatabase){
execSQL(“创建表”+结果表名称+”(“+
结果\u列\u ID+“整数主键自动递增,”+
结果\u列\u名称+“文本,”+
结果列(结果+“文本+”);
}
@凌驾
public void onUpgrade(SQLiteDatabase SQLiteDatabase,inti,inti1){
execSQL(“如果存在删除表”+结果表名称);
onCreate(sqLiteDatabase);
}
public void saveToDB(字符串fname、字符串lname、字符串结果){
SQLiteDatabase=getWritableDatabase();
ContentValues=新的ContentValues();
字符串名称=fname+“”+lname;
value.put(datahelper.RESULTS\u COLUMN\u NAME,NAME);
value.put(datahelper.RESULTS\u COLUMN\u RESULT,RESULT);
database.insert(datahelper.RESULTS\u TABLE\u NAME,null,value);
close()数据库;
}
公共列表readDB(){
列表数据=新的ArrayList();
SQLiteDatabase db=this.getReadableDatabase();
Cursor Cursor=db.rawQuery(“选择*自”+结果\表格\名称+”;”,空);
StringBuffer StringBuffer=新的StringBuffer();
DataModel DataModel=null;
while(cursor.moveToNext()){
dataModel=新的dataModel();
字符串名称=cursor.getString(cursor.getColumnIndexOrThrow(“名称”);
字符串结果=cursor.getString(cursor.getColumnIndexOrThrow(“结果”);
dataModel.setName(name);
dataModel.setResult(result);
追加(数据模型);
data.add(dataModel);
}
返回数据;
}
公共数据库(){
SQLITEDABASE SQLITEDABASE=getWritableDatabase();
字符串clearDBQuery=“DELETE FROM”+结果\表\名称;
execSQL(clearDBQuery);
}
公共无效删除条目(长行){
SQLITEDABASE SQLITEDABASE=getWritableDatabase();
删除(结果表名称,结果列ID+“=”+行,空);
}}
这是加载RecycleWeber的片段
public class ResultsFragment extends Fragment {
DataBHelper database;
RecyclerView recyclerView;
DatabaseAdapter recycler;
public List<DataModel> datamodel;
@Override
public View onCreateView(LayoutInflater inflater, final ViewGroup container,
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.fragment_results,
container, false);
datamodel =new ArrayList<DataModel>();
recyclerView = (RecyclerView) view.findViewById(R.id.app_recycle_view);
database = new DataBHelper(getActivity());
datamodel = database.readDB();
recycler = new DatabaseAdapter(datamodel, getActivity());
RecyclerView.LayoutManager reLayoutManager =new LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(reLayoutManager);
recyclerView.setItemAnimator(new DefaultItemAnimator());
recyclerView.setAdapter(recycler);
ImageView imageView = (ImageView) view.findViewById(R.id.imageView);
if (datamodel.isEmpty()) {
recyclerView.setVisibility(View.GONE);
imageView.setVisibility(View.VISIBLE);
}
else {
recyclerView.setVisibility(View.VISIBLE);
imageView.setVisibility(View.GONE);
}
return view;
}}
公共类ResultsFragment扩展了片段{
数据库;
回收视图回收视图;
数据库适配器回收器;
公共列表数据模型;
@凌驾
创建视图上的公共视图(布局、充气机、最终视图组容器、,
Bundle savedInstanceState){
最终视图=充气机充气(R.layout.fragment_结果,
货柜(虚假);;
datamodel=新的ArrayList();
recyclerView=(recyclerView)视图.findViewById(R.id.app\u recycle\u视图);
数据库=新的DataHelper(getActivity());
datamodel=database.readDB();
雷西
@Override
public void onBindViewHolder(Myholder holder, int position) {
DataModel dataModel = dataModelArrayList.get(position);
holder.name.setText(dataModel.getName());
holder.result.setText(dataModel.getResult());
holder.id = dataModel.getId();
}
dataModelArrayList.remove(getAdapterPosition());
notifyItemRemoved(getAdapterPosition());