如何使用drawable在recyclerview中本地更改图像

wvt8vs2t  于 2021-07-03  发布在  Java
关注(0)|答案(1)|浏览(397)

我正试着用一种新的方式改变图像 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);
}

然后所有这些不管是真是假都变成了记号。不知道我哪里做错了。

t9aqgxwy

t9aqgxwy1#

试试这个:

if (hawbLists.get(position).isTick()){
     holder.timeImage.setImageResource(R.drawable.ic_right);
} else {
     holder.timeImage.setImageResource(R.drawable.ic_not_ticked);
}

你知道回收的概念吗?查看设备中的列表,看看有多少行!现在添加一个(作为交换视图),它就是您拥有的所有视图。意思是不管你有多少个条目( hawbLists.size() ),当您滚动时,所有这些文件都将被创建/回收。所以你必须考虑你的孩子的所有可能的情况。因为如果不是这样的话 view 不会改变世界的 view 状态和可能会显示不相关的行为。

相关问题