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