Android studio 如何按位置从数据库和listview中删除项目
我需要从数据库和ListView中删除该项。我可以从ListView中删除该项,但无法从数据库中删除它。我认为问题在于从数据库中获取项目的位置,我试图用自己的方式来实现,但没有成功。我不知道该怎么办。帮我解决这个问题Android studio 如何按位置从数据库和listview中删除项目,android-studio,Android Studio,我需要从数据库和ListView中删除该项。我可以从ListView中删除该项,但无法从数据库中删除它。我认为问题在于从数据库中获取项目的位置,我试图用自己的方式来实现,但没有成功。我不知道该怎么办。帮我解决这个问题 myDB = new DbHandler(this); userList = new ArrayList<>(); data = myDB.getListContents(); numRows = data.getCoun
myDB = new DbHandler(this);
userList = new ArrayList<>();
data = myDB.getListContents();
numRows = data.getCount();
if (numRows == 0) {
Toast.makeText(AddCount.this, "No Items", Toast.LENGTH_LONG).show();
} else {
while (data.moveToNext()) {
user = new User(data.getString(1), data.getString(2));
userList.add(user);
}
}
adapter = new Two_columnListAdapter(this, R.layout.list_item_layout, userList);
listView.setAdapter(adapter);
adapter.notifyDataSetChanged();
listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
@Override
public boolean onItemLongClick(final AdapterView<?> arg0, View arg1, final int arg2, final long arg3) {
final AlertDialog.Builder delete = new AlertDialog.Builder(AddCount.this);
delete.setIcon(R.drawable.ic_baseline_delete_24);
delete.setTitle("Are you sure");
delete.setMessage("Do you want to delete this item?");
delete.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
DbHandler db = new DbHandler(getApplicationContext());
myDB.deleteData(userList.get(arg2));
userList.remove(arg2);
adapter.notifyDataSetChanged();
Toast.makeText(getApplicationContext(), "Deleted" ,Toast.LENGTH_SHORT).show();
}
});`
可以将返回数据保存在模型类中而不是列表中。然后在适配器类的onBindViewHolder内调用setOnLongClickListener
class listHolder extends RecyclerView.ViewHolder{
private View view;
public listHolder(@NonNull View itemView) {
super(itemView);
view = itemView;
}
}
@Override
public void onBindViewHolder(@NonNull listHolder listHolder, int position, @NonNull userModel userModel) {
viewHolder.view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// Do somethings....
}
});
想了解更多信息,你可以看看这个,希望这有帮助 它不起作用了!我的应用程序崩溃了。您能解释一下为什么我需要使用onBindViewHolder,或者建议我以其他方式从列表中删除一行吗database@subathra我可以知道你犯了什么错误吗?因为我不知道你是如何实现的,所以我很难帮助你。对于onBindViewHolder,它基本上只是显示视图的另一种方式,速度更快,内存利用率更好。有关更多信息,请查看
public void deleteData(String id) {
SQLiteDatabase db = this.getWritableDatabase();
db.delete(TABLE_Inputs, KEY_ID + " =?", new String[]{id});
db.close();
}
class listHolder extends RecyclerView.ViewHolder{
private View view;
public listHolder(@NonNull View itemView) {
super(itemView);
view = itemView;
}
}
@Override
public void onBindViewHolder(@NonNull listHolder listHolder, int position, @NonNull userModel userModel) {
viewHolder.view.setOnLongClickListener(new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
// Do somethings....
}
});