Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/android-studio/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android studio 如何按位置从数据库和listview中删除项目_Android Studio - Fatal编程技术网

Android studio 如何按位置从数据库和listview中删除项目

Android studio 如何按位置从数据库和listview中删除项目,android-studio,Android Studio,我需要从数据库和ListView中删除该项。我可以从ListView中删除该项,但无法从数据库中删除它。我认为问题在于从数据库中获取项目的位置,我试图用自己的方式来实现,但没有成功。我不知道该怎么办。帮我解决这个问题 myDB = new DbHandler(this); userList = new ArrayList<>(); data = myDB.getListContents(); numRows = data.getCoun

我需要从数据库和ListView中删除该项。我可以从ListView中删除该项,但无法从数据库中删除它。我认为问题在于从数据库中获取项目的位置,我试图用自己的方式来实现,但没有成功。我不知道该怎么办。帮我解决这个问题

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....
    }
});