車選びのようなオラを作っています。私は車のタイプ、選択された画像リンクと選択されていない画像リンクを取得しているAPIを持っています。私はそれのためのテキストと画像ビューでrecyclerviewを使用しています。私は最初のポジションを選択して、hover-image
を表示して、選択して表示しています。別のイメージを選択すると、選択したイメージに変わりますが、以前に選択されたイメージは選択されていないイメージに変わりません。これは、forループが機能していないことを意味します。しかし、私が選択されていない画像のURLリンクを印刷すると、URLリンクが正しく表示されます。それでなぜピカソには出てこないの?RecyclerViewクリックで画像を変える
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();
}
}
あなたは 'notifyDataSetChanged()'を試しましたか? –
最後にクリックしたときにnotifyDataSetChanged()を試しました。しかし、これは 'onBindViewHolder'を呼び出すだけで、これは' onBindViewHolder'で選択された最初の位置に戻ります。選択したイメージを最初の位置に表示します –