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()
我已经在 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()