android - Recyclerview notifyDataSetChanged();不工作

标签 android android-recyclerview

我尝试使用以下代码从 RecyclerView 中删除项目并再次更新列表

public class ScannedCodesAdapter extends RecyclerView.Adapter<ScannedCodesAdapter.ViewHolder> {

private List<CodeItem> mList;
private Context mContext;
private OnItemClickListener mClick;

public ScannedCodesAdapter(List<CodeItem> list, Context context, OnItemClickListener click) {
    mList = list;
    mContext = context;
    mClick = click;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    ScanProductCodeItemBinding mBinding = DataBindingUtil.inflate(LayoutInflater.from(parent.getContext()),
            R.layout.scan_product_code_item, parent, false);
    return new ViewHolder(mBinding);
}

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

    CodeItem item = mList.get(position);
    String code = item.getCode();
    holder.binding.adapterCode.setText(code);
    int num = position + 1;
    if (mList != null)
        holder.binding.adapterNum.setText(num + " ");
    if ((position % 2) == 0) {
        holder.itemView.setBackgroundResource(R.color.white);
    } else {
        holder.itemView.setBackgroundResource(R.color.color2);
    }

    if (item.selected) {
        holder.binding.adapterDelete.setVisibility(View.VISIBLE);
    } else {
        holder.binding.adapterDelete.setVisibility(View.GONE);
    }

    holder.itemView.setOnClickListener(view -> {
        for (CodeItem m : mList) {
            m.selected = false;
        }
        item.selected = true;
        notifyDataSetChanged();
    });
    holder.binding.adapterDelete.setOnClickListener(view ->
    {
       // mClick.onClick(view, position);
        //notifyItemRemoved(position);

        SQLiteDataBaseHandler handler = new SQLiteDataBaseHandler(mContext);
        CodeItem codeItem = handler.getCodeItem(code);
        if (item != null) {
        handler.deleteCode(codeItem);
         notifyDataSetChanged();
    });

}

@Override
public int getItemCount() {
    return mList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder {
    ScanProductCodeItemBinding binding;

    public ViewHolder(ScanProductCodeItemBinding binding) {
        super(binding.getRoot());
        this.binding = binding;
    }
}

这里的回收站在删除项目后不更新。 如果我回去只更新列表。我也试过 OnItemClickListener 从 Activity 中删除。 notifyDataSetChanged();我试过这个,也试过 notifyItemRemoved(position);但不工作 有人建议这样做吗??

最佳答案

所以你需要更新你的代码。根据您的 deleteCode 方法,您的 mList 在删除时不会被修改。 notifyDataSetChanged 仅在填充适配器的基础列表发生更改时才有效。

所以你需要在调用notifyDataSetChanged之前更新你的mList

因此将您的代码修改为 -

holder.binding.adapterDelete.setOnClickListener(view ->
{
    //Remove from list
    mList.remove(position);
    notifyDataSetChanged();
     //...delete from db ...
    SQLiteDataBaseHandler handler = new SQLiteDataBaseHandler(mContext);
    CodeItem codeItem = handler.getCodeItem(code);
    if (item != null) {
    handler.deleteCode(codeItem);

});

关于android - Recyclerview notifyDataSetChanged();不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45546876/

相关文章:

android - 我可以使用 URL 更改 firebase 实时数据库吗?

android - RecyclerView滚动监听的方法onscolled自动调用不滚动

android - 我可以让仪器测试杀死并重新启动应用程序进程吗?

android - 在 Android Studio 中构建文件时出现 Flutter 错误

Android Retrotfit 在接收后修改对象的字段

android - RecyclerView 不刷新

java - 更改 RecyclerView 项目时刷新 SearchView

android - 仅使用 kv 文件在 kivy 中创建 DropDown

android - Cardslib 的 CardRecyclerView 始终为 null

java - 使用回收器 View android studio访问其他 View