我正在做汽车选择功能。我有一个API,我从中获得车型,选择的图像链接和未选择的图像链接。我正在使用具有文本和图像视图的recyclerview。在创建recyclerview时,我选择第一个位置并显示hover-image
以显示所选内容。当我选择另一个图像时,它会更改为所选图像,但之前选择的图像不会更改为未选择的图像。这意味着for循环不起作用。但是当我打印未选择图像的url链接时,url链接显示正确。那为什么它没有在毕加索展出。
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.MyViewHolder> {
private List<Model> arrayList;
private Context context;
public MyAdapter(Context context, List<Model> arrayList) {
this.arrayList = arrayList;
this.context = context;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.rowlayout, parent, false);
return new MyViewHolder(itemView);
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
TextView txt;
ImageView image;
LinearLayout LL_root;
MyViewHolder(View view) {
super(view);
txt = (TextView) view.findViewById(R.id.txt);
image = (ImageView) view.findViewById(R.id.image);
LL_root = (LinearLayout) view.findViewById(R.id.LL_root);
LL_root.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.LL_root:
int pos = getAdapterPosition();
System.out.println("sammy_onclick_position "+pos);
for(int i=0; i<arrayList.size(); i++){
if(pos!=i){
Picasso.with(context).load(arrayList.get(i).getImage()).into(image);
System.out.println("sammy_unselected_image "+arrayList.get(i).getImage());
}
}
Picasso.with(context).load(arrayList.get(pos).getSelectedImage()).into(image);
System.out.println("sammy_selected_image "+arrayList.get(pos).getSelectedImage());
break;
}
}
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Model model = arrayList.get(position);
holder.txt.setText(model.getTitle());
if (!TextUtils.isEmpty(model.getImage())){
if(position==0)
Picasso.with(context).load(model.getSelectedImage()).into(holder.image);
else
Picasso.with(context).load(model.getImage()).into(holder.image);
}
}
@Override
public int getItemCount() {
return arrayList.size();
}
}
答案 0 :(得分:2)
您可以保留对适配器中所选位置的引用,然后检查onBindViewHolder
中是否选择了当前项目:
创建一个全局字段:
int selectedPos = 0;
在你onClick
:
selectedPos = getAdapterPosition();
在你的onBindViewHolder
中以这种方式进行检查:
if(position == selectedPos) {
Picasso.with(context).load(model.getSelectedImage()).into(holder.image);
} else {
Picasso.with(context).load(model.getImage()).into(holder.image);
}
答案 1 :(得分:0)
尝试使用所选的第二项重置适配器。