Java 回收视图-实施B&;根据标志显示W项图像

Java 回收视图-实施B&;根据标志显示W项图像,java,android,android-recyclerview,Java,Android,Android Recyclerview,我尝试创建一个显示图像的RecyclerView。我想实现一个功能,如果某个变量状态为“CLOSE”,则将图像项设置为B&W,否则将其保留为RGB 我有一个名为Player的对象播放器包含:int-id,int-imgAdrs,字符串状态 我传递给RecyclerView一个包含所有玩家图像地址的数组allPlayers,以及一个包含所有玩家状态的数组mStatus 由于我试图避免每个项目都有两张图片(一个RGB和第二个BW)-我尝试在ViewHolder构造函数初始化期间对ImageView项

我尝试创建一个显示图像的
RecyclerView
。我想实现一个功能,如果某个变量状态为“CLOSE”,则将图像项设置为B&W,否则将其保留为RGB

我有一个名为
Player
的对象<代码>播放器包含:
int-id
int-imgAdrs
字符串状态

我传递给
RecyclerView
一个包含所有玩家图像地址的数组
allPlayers
,以及一个包含所有玩家状态的数组
mStatus

由于我试图避免每个项目都有两张图片(一个RGB和第二个BW)-我尝试在ViewHolder构造函数初始化期间对
ImageView
项目应用BW过滤器

但是
status
变量不会传递给
ViewHolder
status
null
),并且仅对
RecycleServiceAdapter
可见

有人能帮我弄清楚吗

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

    private ArrayList<Integer> allPlayers = new ArrayList<>();
    private ArrayList<String> mStatus = new ArrayList<>();
    private Context mContext;

    public RecyclerViewAdapter(Context mContext, ArrayList<Integer> mImages, ArrayList<String> mStatus) {
        this.allPlayers = mImages;
        this.mStatus = mStatus;
        this.mContext = mContext;
    }

    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.lay_players_item_list, parent, false);
        ViewHolder holder = new ViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {   
        Glide.with(mContext)
                .asBitmap()
                .load(allPlayers.get(position))
                .into(holder.image);

        holder.status = mStatus.get(position);
        holder.parentLayout.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Toast.makeText(mContext, "(:", Toast.LENGTH_SHORT).show();
            }
        });
    }

    @Override
    public int getItemCount() { //How many items are in the list
        return allPlayers.size();
    }

    public class ViewHolder extends RecyclerView.ViewHolder {
            ImageView image;
        RelativeLayout parentLayout;
        String status;

        public ViewHolder(View itemView) {
            super(itemView);
            image = itemView.findViewById(R.id.image);
            parentLayout = itemView.findViewById(R.id.parent_layout);

            if (status.equals("CLOSE")) {
                ColorMatrix matrix = new ColorMatrix();
                matrix.setSaturation(0);

                ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
                image.setColorFilter(filter);

            }
        }
    }
公共类RecycleServiceAdapter扩展了RecyclerView.Adapter{
private ArrayList allPlayers=new ArrayList();
private ArrayList mStatus=new ArrayList();
私有上下文;
公共RecycleServiceAdapter(上下文mContext、ArrayList mImages、ArrayList mStatus){
this.allPlayers=mImages;
this.mStatus=mStatus;
this.mContext=mContext;
}
@凌驾
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType){
View View=LayoutInflater.from(parent.getContext()).flate(R.layout.lay\u players\u item\u list,parent,false);
ViewHolder=新的ViewHolder(视图);
报税表持有人;
}
@凌驾
public void onBindViewHolder(@NonNull ViewHolder,final int position){
使用(mContext)滑动
.asBitmap()
.加载(所有玩家.获取(位置))
.插入(支架图像);
holder.status=mStatus.get(位置);
holder.parentLayout.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
Toast.makeText(mContext,(:),Toast.LENGTH_SHORT.show();
}
});
}
@凌驾
public int getItemCount(){//列表中有多少项
返回allPlayers.size();
}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
图像视图图像;
相对亲子布局;
字符串状态;
公共视图持有者(视图项视图){
超级(项目视图);
image=itemView.findviewbyd(R.id.image);
parentLayout=itemView.findviewbyd(R.id.parent\u布局);
如果(状态等于(“关闭”)){
ColorMatrix=新的ColorMatrix();
基质饱和(0);
ColorMatrixColorFilter过滤器=新的ColorMatrixColorFilter(矩阵);
image.setColorFilter(过滤器);
}
}
}

在onBindViewHolder中添加此代码

        if (mStatus.get(position).equals("CLOSE")) {
            ColorMatrix matrix = new ColorMatrix();
            matrix.setSaturation(0);

            ColorMatrixColorFilter filter = new ColorMatrixColorFilter(matrix);
            holder.image.setColorFilter(filter);

        }
您只能在onBindViewHolder方法中编辑任何视图。Viewholder就像一个只保存您的视图的支架


让我知道这是否解决了您的问题?

谢谢!您是最棒的:)