Android 设置点击更新和删除适配器中的图像按钮 SQLite 数据不起作用

Android Set On CLick Update & Delete ImageButton SQLite data from Adapter not working

我已经在 item_report.xml 中制作了更新和删除按钮,在我的 Adapter.class 中制作了功能。我将我的 recyclerview 放在片段中,我在 MainActivity 中的 tablayout 中制作了 2 个选项卡,但是当我按下 Delete 或 Edit/Update 它不起作用。

但是我放在 Update 中的吐司“这应该可以工作”工作但没有用于更新的 alertdialog,并且 Delete 中的 AlertDialog 出现并工作。我认为我的数据更新和删除有问题,但我知道我认为 运行 日志中没有错误。

这是我在 Adapter.class 中的编辑和删除:

    @Override
    public void onBindViewHolder(@NonNull Holder holder, @SuppressLint("RecyclerView") int position) {

        ReportDraft reportDraft = arrayList.get(position);

        final String id       = reportDraft.getId();
        final String token    = reportDraft.getToken();
        final String email    = reportDraft.getEmail();
        

        holder.judul.setText(judul);
        

        
        holder.editbtn.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                Toast.makeText(view.getContext(), "This should be working", Toast.LENGTH_SHORT).show();
                editDialog(
                        ""+position,
                        ""+id,
                        ""+token,
                        ""+email
                        

                );

            }
        });

        holder.deletebtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                deleteDialog(
                        ""+id
                );
            }
        });


    }

    private void deleteDialog(final String id){

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Delete");
        builder.setMessage("Are you sure to delete it?");
        builder.setCancelable(false);
        builder.setIcon(R.drawable.ic_delete);

        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                databaseHelper.deleteInfo(id);
                //FragmentDraft frd = (FragmentDraft) ;
                ((MainActivity)context).onResume();
                Toast.makeText(context, "Aw", Toast.LENGTH_SHORT).show();
            }
        });

        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
            }
        });

        builder.create().show();

    }

    private void editDialog(String position, String id, String token, String email) {

        AlertDialog.Builder builder = new AlertDialog.Builder(context);
        builder.setTitle("Update");
        builder.setMessage("Update data?");
        builder.setCancelable(false);

        builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                Intent intent = new Intent(context, EditReportActivity.class);
                intent.putExtra("ID", id);
                intent.putExtra("TOKEN", token);
                intent.putExtra("EMAIL", email);
                

                intent.putExtra("editMode", true);
                context.startActivity(intent);
            }
        });

        builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {

                dialogInterface.cancel();
            }
        });
    }

这是 bcuz 我的片段还是主要片段 activity 还是什么?因为我把 recyclerview 放在 fragment 里面,fragemnt 在我的 MainActivity 的 tablayout 里面。

更新

删除按钮成功删除但列表没有改变,除非我打开其他activity然后返回

已解决,抱歉我忘记设置 builder.create().show()。谢谢

从数据库中删除项目时,您的删除不会从适配器的数据源(您的 arrayList)中删除项目,也不会通知适配器数据发生了变化。

将所选项目位置传递给您的 deleteDialog 方法:

holder.deletebtn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        deleteDialog(
                position,
                ""+id
        );
    }
});

添加从您的数据源中删除的项目:

private void deleteDialog(final int position, final String id){

    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    builder.setTitle("Delete");
    builder.setMessage("Are you sure to delete it?");
    builder.setCancelable(false);
    builder.setIcon(R.drawable.ic_delete);

    builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {

            databaseHelper.deleteInfo(id);

            arrayList.remove(position);
            notifyDatasetChanged();

            Toast.makeText(context, "Aw", Toast.LENGTH_SHORT).show();
        }
    });

    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });

    builder.create().show();

}

添加的行是:

arrayList.remove(position);

从适配器的数据源中删除项目

并且:

notifyDatasetChanged();

告诉适配器数据已更改,需要重新加载。

根据未显示的编辑对话框,您似乎缺少 show() 调用:

editDialog 方法的末尾添加:

builder.show()