Recyclerview notifyDataSetChanged (); does not work

I tried to remove items from RecyclerView and refresh the list again using below code

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

here the recycler is not updated after the item is deleted. If I come back and come only update the list. I also tried removing OnItemClickListener from the action. notifyDataSetChanged (); I tried this and also tried notifyItemRemoved (position); but doesn't work Does anyone suggest an idea to do this?

+4
source share
3 answers

, . deleteCode mList . notifyDataSetChanged , , , .

, mList notifyDataSetChanged

-

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

});
+4
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);

    });
+2

Your data List<CodeItem> mListwill not be changed until the call notifyDataSetChanged. Remove the appropriate item from the list before calling notifyDataSetChanged.

0
source

Source: https://habr.com/ru/post/1683166/


All Articles