Android 当项目从RecyclerView中删除时,TextView上的删除线保持在同一行

Android 当项目从RecyclerView中删除时,TextView上的删除线保持在同一行,android,android-recyclerview,Android,Android Recyclerview,我在RecyclerView上有一个项目列表,当您选择一个项目“onLongclick”时,项目名称上方会出现一个删除线我的问题是删除该项目(并调用notifyDataSetChanged())时,删除线与先前删除的项目保持完全相同的行,但现在是对新项目的删除。例如: 删除项目前的我的列表 清单项目A 列表项B |项B代表删除线 清单项目C 清单项目D 删除项目后的我的列表 清单项目A 列表项C |意外项已删除 清单项目D 当我离开页面并重新打开它时,项目将正确显示,没有出现不需要的删除线,我在

我在RecyclerView上有一个项目列表,当您选择一个项目“onLongclick”时,项目名称上方会出现一个删除线我的问题是删除该项目(并调用notifyDataSetChanged())时,删除线与先前删除的项目保持完全相同的行,但现在是对新项目的删除。例如:

删除项目前的我的列表

  • 清单项目A
  • 列表项B |项B代表删除线
  • 清单项目C
  • 清单项目D
  • 删除项目后的我的列表

  • 清单项目A
  • 列表项C |意外项已删除
  • 清单项目D
  • 当我离开页面并重新打开它时,项目将正确显示,没有出现不需要的删除线,我在代码中确保了这一点,但当我第一次删除删除删除线时,我不知道如何做到这一点。我是应用程序开发新手,但我觉得我只是错过了一个显而易见的解决方案,不管是不是…提前谢谢你

    另外,我的理解是,即使数据发生变化,删除线也会保持在完全相同的RecycleView文件夹上,但我不确定如何在不关闭和打开活动的情况下撤消删除线

    类ListRecycleServiceWholder扩展了RecycleView.ViewHolder实现了View.OnClickListener、View.OnLongClickListener{
    公共文本视图名称视图;
    公共文本视图类别视图;
    私有项ClickListener项ClickListener;
    公共ListRecycleServiceWholder(@NonNull View itemView){
    超级(项目视图);
    nameView=itemView.findviewbyd(R.id.li\u name\u视图);
    categoryView=itemView.findViewById(R.id.li\u category\u视图);
    setOnClickListener(这个);
    setOnLongClickListener(此);
    }
    public void setItemClickListener(ItemClickListener ItemClickListener){
    this.itemClickListener=itemClickListener;
    }
    @凌驾
    公共void onClick(视图v){
    Onclick(v,getAdapterPosition(),false);
    }
    @凌驾
    仅长按公共布尔值(视图v){
    Onclick(v,getAdapterPosition(),true);
    返回true;
    }
    public void SetStrike(文本视图文本、布尔罢工){
    如果(罢工){
    text.setPaintFlags(text.getPaintFlags()| Paint.STRIKE_-THRU_-text_-FLAG);
    text.setTextColor(Color.GRAY);
    }否则{
    text.setPaintFlags(text.getPaintFlags()&~Paint.STRIKE_-THRU_-text_-FLAG);
    text.setTextColor(Color.BLACK);
    }
    }
    }
    公共类ListItemAdapter扩展了RecyclerView.Adapter{
    private List malletems=new ArrayList();
    公共语境;
    公共int-selectedItem;
    私有列表allCrossedItemsOnList=new ArrayList();
    私有布尔checkIfEmpty=false;
    public void setItemsAdaptor(列出所有项、上下文){
    if(allItems.isEmpty()| | allItems==null)
    {
    //列表中没有项目
    存货项目=新存货();
    item.setName(“列表为空!”);
    项目.设置类别(“”);
    所有项目。添加(项目);
    this.mAllItems=allItems;
    this.context=上下文;
    this.allCrossedItemsOnList=null;
    checkIfEmpty=true;
    //调用此选项时,将更新列表中显示的所有项目。
    this.notifyDataSetChanged();
    返回;
    }
    this.mAllItems=allItems;
    this.context=上下文;
    this.allCrossedItemsOnList=FindAllCrossedItems();
    checkIfEmpty=false;
    //调用此选项时,将更新列表中显示的所有项目。
    notifyDataSetChanged();
    Log.d(“标签”,“数据更新适配器”);
    }
    @非空
    @凌驾
    public listRecycleServiceWholder onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
    LayoutInflater充气器=LayoutInflater.from(viewGroup.getContext());
    视图项视图=充气机。充气(右布局。列表项选项卡,视图组,false);
    返回新的ListRecycleServiceWholder(itemView);
    }
    @凌驾
    BindViewHolder上的公共void(@NonNull final listRecycleServiceWholder RecycleWebWholder,int i){
    recycleServiceWholder.nameView.setText(mAllItems.get(i).getName());
    RecycleServiceWolder.categoryView.setText(mAllItems.get(i.getCategory());
    //当页面打开时,设置项目是否交叉。
    如果(!checkIfEmpty&&allCrossedItemsOnList!=null){
    用于(库存项目:allCrossedItemsOnList){
    if(mAllItems.get(i).getId()==item.getId()){
    recyclerViewHolder.SetStrike(recyclerViewHolder.nameView,true);
    }
    }
    }
    如果(!checkIfEmpty&&RecycleServiceWholder.nameView.getPaint().isStrikeThruText())为else,则为{
    recyclerViewHolder.SetStrike(recyclerViewHolder.nameView,false);
    }
    RecycleServiceWholder.setItemClickListener(新项目ClickListener(){
    @凌驾
    public void Onclick(视图、int位置、布尔值isLongClicked){
    如果(!checkIfEmpty){
    如果(已单击){
    Toast.makeText(上下文,“选定:“+mAllItems.get(position).getName(),Toast.LENGTH_SHORT).show();
    //选择EdItem=位置;
    如果(!RecycleServiceWholder.nameView.getPaint().isStrikeThruText()){
    recyclerViewHolder.SetStrike(recyclerViewHolder.nameView,true);
    allCrossedItemsOnList.add(mAllItems.get(position));
    mAllItems.get(position).setCrossedOnList(true);
    MainActivity.myAppLocalDatabase.myDao().updateItem(mAllItems.get(position));
    }否则{
    recyclerViewHolder.SetStrike(recyclerViewHolder.nameV