gpt4 book ai didi

java - 我的 RecyclerView 中的 SQLite 数据没有被删除

转载 作者:行者123 更新时间:2023-12-02 11:21:06 25 4
gpt4 key购买 nike

我正在尝试从 SQLite 数据库中删除数据,但它不起作用。

查看SQlite数据库DELETE查询:

public void deleteCompany(long company_id) {
SQLiteDatabase db = dbHelper.getWritableDatabase();

db.delete(COMPANY, KEY_ID + " = ?", new String[] { String.valueOf(company_id) });
}

在哪里删除数据CompaniesFragment.java:

rvCompanies_view.addOnItemTouchListener(new RecyclerTouchListener(getActivity().getApplicationContext(), rvCompanies_view, new AddAffiliatedCompanyActivity.ClickListener() {
@Override
public void onLongClick(final View child, final int childPosition) {

final AlertDialog.Builder alertDialog = new AlertDialog.Builder(getActivity(), R.style.Theme_AppCompat_DayNight_Dialog);
alertDialog.setTitle("Confirm Delete...");
alertDialog.setMessage("Are you sure you want delete this Company?");

alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
myDb.deleteCompany(childList.get(childPosition).getId());
childList.remove(childPosition);
adapterRecycler.notifyDataSetChanged();
Toast.makeText(getActivity().getApplicationContext(), "Company Deleted", Toast.LENGTH_SHORT).show();
}
});
alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog.show();
}

@Override
public void onClick(View child, int childPosition) {
}
}));

下面的代码可在 RecyclerView 上使用,但我将单独定义以便更好地理解:

myDb.deleteCompany(childList.get(childPosition).getId());
childList.remove(childPosition);
adapterRecycler.notifyDataSetChanged();
Toast.makeText(getActivity().getApplicationContext(), "Company Deleted", Toast.LENGTH_SHORT).show();

更新

我将更改我的代码,如下所示:

Log.e("TAG", "Size Of Array :" + childList.size());
Log.e("TAG", "Id" + childList.get(childPosition).getId());
myDb.deleteCompany(childList.get(childPosition).getId());
childList.remove(childPosition);
adapterRecycler.notifyItemRemoved(childPosition);
//adapterRecycler.notifyDataSetChanged();
//Log.d("ADebugTag", "Value: " + childList);
Toast.makeText(getActivity().getApplicationContext(), "Company Deleted", Toast.LENGTH_SHORT).show();

它给了我错误: java.lang.IndexOutOfBoundsException:索引 2 无效,大小为 2

这只是显示一条Toast消息,没有删除数据或任何东西

最佳答案

尝试使用

adapterRecycler.notifyItemRemoved(childPosition)
adapterRecycler.notifyItemRangeChanged(childPosition, getItemCount());

而不是

adapterRecycler.notifyDataSetChanged();

关于java - 我的 RecyclerView 中的 SQLite 数据没有被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49915364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com