在 RecyclerView 中搜索项目时图像视图的位置发生变化

问题描述

我有一个 RecyclerView,其中每个项目都有一个 ImageView,形式为 sendEmail 图标。最初,ImageView 是可见的,但是一旦我点击它,我就会使用 setVisibility(View.GONE) 隐藏它并更新 Adapter

现在,当我点击 sendEmail 图标时,我会立即使用 reportitems.get(position).setStatus("emailsent"); 隐藏该位置的图标。现在,如果在 search 操作之前,第二个项目的 ImageView 可见而第一个项目没有,那么在搜索之后,如果第二个项目是唯一相关的项目,那么 { {1}} 没有出现在第一个位置。我正在使用动态搜索,在输入字符时,适配器会立即刷新并显示更新的 RecyclerView。我该如何解决这个问题?

I have added the image of my recyclerview below

搜索后,即使 SQ 322 应该有 ImageView 图标,它也没有显示

enter image description here

活动代码

sendEmail

适配器代码

mAdapter.setonItemClickListener(new ReportAdapter.OnItemClickListener() {
    public void onSendEmailClick(int position){


        flightNumber=reportitems.get(position).getFlightNumber();
        departureDate=reportitems.get(position).getDepartureDate();

        FlightClosureStatus flightClosureStatus=new FlightClosureStatus(flightNumber,departureDate,"emailsent");
        flightviewmodel.updateFlightClosureStatus(flightClosureStatus);

        reportitems.get(position).setStatus("emailsent");
        mAdapter.notifyDataSetChanged();
        }
        }

解决方法

将您的 onBindViewHolder 替换为以下内容,基本上回收商会在可用时使用池中的项目,并且一旦项目可见性为 GONE,除非您这样做,否则它永远不会再次设置为 VISIBLE

 @SuppressLint("ResourceAsColor")
    @Override
    public void onBindViewHolder(@NonNull ReportViewHolder holder,int position) {

        ReportItem currentItem = reportlist.get(position);

        //here i am setting the visibility of the imageview to gone
        if(currentItem.getStatus().contentEquals("emailsent")){
            holder.emailView.setVisibility(View.GONE);
        }else{
            holder.emailView.setVisibility(View.VISIBLE);
        }

        holder.flightNumber.setText(currentItem.getFlightNumber());
        holder.departureDate.setText((currentItem.getDepartureDate()));


    }

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...