2017-09-19 2 views
0

RecyclerViewを使用して、ImageとTextViewをrawアイテムとして含むデータを表示しました。recyclerviewアダプタの画像が変更されました。

マイアダプタクラスは以下の通りです:

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.RecyclerViewHolders> { 

private List<MyModel> itemList; 
private Context context; 

private DisplayImageOptions displayImageOptions; 

public MyAdapter(Activity context, List<MyModel> itemList) { 
    this.itemList = itemList; 
    this.context = context; 
} 

@Override 
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) { 
    View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.singleview_grid_location, null); 
    RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView); 
    return rcv; 
} 

@Override 
public void onBindViewHolder(final RecyclerViewHolders holder, final int position) { 
    holder.rl_main.setTag(position); 
    final MyModel mainModel = itemList.get((int) holder.rl_main.getTag()); 
    if (mainModel.is_selected()) { 
     holder.rl_main.setBackgroundResource(R.drawable.border_theme); 
     holder.iv_selection.setVisibility(View.VISIBLE); 
    } else { 
     holder.rl_main.setBackgroundColor(Color.parseColor("#FFFFFF")); 
     holder.iv_selection.setVisibility(View.GONE); 
    } 

    holder.txt_location_name.setText(mainModel.getLocationName()); 
    if (mainModel.getImagePath() != null && !mainModel.getImagePath().equals("")) { 
     Constant.getImageLoader().displayImage(mainModel.getImagePath(), 
       holder.iv_location_photo, Constant.getInstanceImageOptions(R.mipmap.popup_placeholder), new SimpleImageLoadingListener() { 
        @Override 
        public void onLoadingStarted(String imageUri, View view2) { 
        } 

        @Override 
        public void onLoadingFailed(String imageUri, View view2, FailReason failReason) { 
         holder.iv_location_photo.setImageResource(R.mipmap.popup_placeholder); 
        } 

        @Override 
        public void onLoadingComplete(String imageUri, View view2, Bitmap loadedImage) { 
        } 
       }); 
    } 
    holder.itemView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      if (mainModel.is_selected()) { 
       mainModel.setIs_selected(false); 
      } else { 
       mainModel.setIs_selected(true); 
      } 
      itemList.set(position, mainModel); 
      notifyDataSetChanged(); 
     } 
    }); 
} 

@Override 
public int getItemCount() { 
    return this.itemList.size(); 
} 

public class RecyclerViewHolders extends RecyclerView.ViewHolder { 
    public TextView txt_location_name; 
    public ImageView iv_location_photo; 
    public CardView card_view; 
    public ImageView iv_selection; 
    public RelativeLayout rl_main; 

    public RecyclerViewHolders(View itemView) { 
     super(itemView); 
     txt_location_name = (TextView) itemView.findViewById(R.id.txt_location_name); 
     iv_location_photo = (ImageView) itemView.findViewById(R.id.iv_location_photo); 
     card_view = (CardView) itemView.findViewById(R.id.card_view); 
     iv_selection = (ImageView) itemView.findViewById(R.id.iv_selection); 
     rl_main = (RelativeLayout) itemView.findViewById(R.id.rl_main); 
    } 
} 
} 

問題は、私はRecyclerviewのビューをクリックしていた場合、画像が変化してしまった、ということです。ええ、textviewと私の選択は同じで、正確に動作します。問題はビューのためにイメージが変更されていることです。

何が問題なのですか?してください、チェックアウト。ありがとう。

+0

onLoadingCompleteイメージを変更していませんか? – Anonymous

+0

エラーの場合を除いてイメージをどこにも設定していません。 – nomag

+0

@nomagユニバーサルイメージローダーとイメージの使用が成功しました。生の商品をクリックすると画像が変わるという問題があります。 –

答えて

0

これは何がポイントですか?

holder.rl_main.setTag(position); 
final MyModel mainModel = itemList.get((int) holder.rl_main.getTag()); 

あなたはonBindViewはあなたを提供して位置パラメータ自体からリストの位置を取得する必要があります。 次へonClickViewListenerをクラス自体に記述し、onBindView.Bad Practice内に実装しないでください。いくつかの問題が発生する可能性があります。 オーバーライドメソッド。 「getItemViewType(int position)」 モデルを変更した後。 getAdapterPositionから得ることができる必要性と提供位置に基づいて、追加/削除/変更/挿入通知アイテムを行う必要があります。

+0

@kartik getTag()n setTag()について知りませんか? –

+0

私は知っていますが、それを使っている点はありません。以前はリストビューで使用していました。 –

+0

私はrecyclerviewをスクロールしているときに、位置が変わってしまいます。なぜか。 –

関連する問題