我正试着用一种新的方式改变图像 RecyclerView
具有本地可绘制的图像。所以在这个项目中 RecyclerView
是从本地数据库获取数据,当布尔列变为真时,它应该变为记号。我的项目视图如下所示。
当列为真时,时钟符号变为滴答声。下面是我尝试的代码:
我的适配器代码:
public class HawbListAdapter extends RecyclerView.Adapter<HawbListAdapter.MyViewHolder> {
private Context context;
private ArrayList<HawbLists> hawbLists;
private DatabaseHelper mDatabaseHelper;
public HawbListAdapter(Context context, ArrayList<HawbLists> hawbLists) {
this.context = context;
this.hawbLists = hawbLists;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.hawb_list, parent, false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.Hcode.setText(hawbLists.get(position).getHawbCode());
holder.name.setText(hawbLists.get(position).getName());
if (hawbLists.get(position).isTick()) {
holder.timeImage.setImageResource(R.drawable.ic_right);
}
//Picasso.get().load(hawbLists.get(position).isTick()).into(holder.timeImage);
//holder.timeImage.setImageResource(R.drawable.ic_right);
}
@Override
public int getItemCount() {
return hawbLists.size();
}
public static class MyViewHolder extends RecyclerView.ViewHolder {
private TextView Hcode;
private TextView name;
private ImageView timeImage;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
Hcode = itemView.findViewById(R.id.hawbCode12345);
name = itemView.findViewById(R.id.name_hawb_list);
timeImage = itemView.findViewById(R.id.timeImage);
}
}
}
即使我用这个
if (hawbLists.get(position).isTick()) {
holder.timeImage.setImageResource(R.drawable.ic_right);
}
其中一项是真的,它仍然显示相同的时钟(等待)符号,但是如果我使用这个:
if (!hawbLists.get(position).isTick()) {
holder.timeImage.setImageResource(R.drawable.ic_right);
}
然后所有这些不管是真是假都变成了记号。不知道我哪里做错了。
1条答案
按热度按时间t9aqgxwy1#
试试这个:
你知道回收的概念吗?查看设备中的列表,看看有多少行!现在添加一个(作为交换视图),它就是您拥有的所有视图。意思是不管你有多少个条目(
hawbLists.size()
),当您滚动时,所有这些文件都将被创建/回收。所以你必须考虑你的孩子的所有可能的情况。因为如果不是这样的话view
不会改变世界的view
状态和可能会显示不相关的行为。