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就像一个只保存您的视图的支架
让我知道这是否解决了您的问题?谢谢!您是最棒的:)