2017-03-01 7 views
1

車選びのようなオラを作っています。私は車のタイプ、選択された画像リンクと選択されていない画像リンクを取得している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(); 
 
    } 
 
}

+0

あなたは 'notifyDataSetChanged()'を試しましたか? –

+0

最後にクリックしたときにnotifyDataSetChanged()を試しました。しかし、これは 'onBindViewHolder'を呼び出すだけで、これは' onBindViewHolder'で選択された最初の位置に戻ります。選択したイメージを最初の位置に表示します –

答えて

2

あなたは、アダプタの選択位置への参照を保持し、現在の項目がonBindViewHolderで選択されているかどうかを確認することができます

グローバルフィールド作成:onClick

int selectedPos = 0; 

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

選択される第二項目にアダプタをリセットしてください。

関連する問題