2016-08-30 11 views
0

私のrecyclerviewにはimageviewとtextviewが1つあります。私はImageView onn onClickListenerのイメージを変更しています。今問題は、位置3の画像をクリックしてスクロールダウンすると、ポジション8の画像も変更され、スクロールアップすると位置2の画像が変更されます。recyclerviewの選択されたイメージはスクロール時に選択解除されます

public class PortraitListviewAdapter extends RecyclerView.Adapter<PortraitListviewAdapter.ViewHolder> { 

Context context; 
static List<PortraitParentListAdapterBean> list; 
static List<String> selectedPosition ; 

public PortraitListviewAdapter(Context context, List<PortraitParentListAdapterBean> list) { 
    this.context = context; 
    this.list = list; 
    selectedPosition = new ArrayList<>(); 
} 
@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View itemView = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.listview_parent_portrait, parent, false); 

    return new ViewHolder(itemView); 
} 
@Override 
public void onBindViewHolder(final ViewHolder holder, final int position) { 

    PortraitParentListAdapterBean portBean = list.get(position); 
    Log.i("pos",position+""); 
    holder.parentHeading.setText(portBean.getHeading()); 
    if (selectedPosition.contains(list.get(position).getHeading())){ 
     holder.parentImage.setImageResource(R.drawable.sad); 
    } 


} 

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

static class ViewHolder extends RecyclerView.ViewHolder { 
    protected TextView parentHeading; 
    protected ImageView parentImage; 

    public ViewHolder(View itemView) { 
     super(itemView); 

     parentHeading = (TextView)itemView.findViewById(R.id.parent_heading); 
     parentImage = (ImageView)itemView.findViewById(R.id.imageView); 

     itemView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       selectedPosition.add(list.get(getAdapterPosition()).getHeading()); 
       parentImage.setImageResource(R.drawable.sad); 
      } 
     }); 
    } 
} 

} 

上記のコードは、recyclerviewアダプターの実装です。その概念を理解するのを助けてください。

if (selectedPosition.contains(list.get(position).getHeading())){ 
     holder.parentImage.setImageResource(R.drawable.sad); 
} else { 
     holder.parentImage.setImageResource(R.drawable.your_default_drawable); 
} 

EXPLANATION

あなたRecyclerViewをスクロールすると、システムがないのrecreaと

答えて

0

SOLUTION

変更

if (selectedPosition.contains(list.get(position).getHeading())){ 
     holder.parentImage.setImageResource(R.drawable.sad); 
}

ViewHolderは常に使用しますが、以前は表示されていないものを再利用するため、間違った値が表示されないように標準値をリセットする必要があります。

関連する問題