2016-08-30 5 views
0

In meiner Recycleransicht gibt es eine Bildansicht und Textansicht. Ich ändere Bild von ImageView onn onClickListener. Jetzt ist das Problem, wenn ich auf Bild von Position 3 anklicke und nach unten scrolle ... Bild von Position 8 wird auch geändert und wieder wenn ich hochscrolle ... Bild von Position 2 wird geändert.Ausgewähltes Bild in der Recycleransicht wird beim Scrollen nicht ausgewählt

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); 
      } 
     }); 
    } 
} 

} 

Der obige Code ist meine Implementierung für Recyclerview-Adapter. bitte helfen Sie, das Konzept zu verstehen.

Antwort

0

SOLUTION

Änderung

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

mit

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

ERKLÄRUNG

Wenn Sie Ihr RecyclerView bewegen das System nicht recrea Verwenden Sie immer Ihren ViewHolder, aber verwenden Sie einen zuvor gescrollten Ordner, der nicht mehr sichtbar ist. Daher müssen Sie Ihre Standardwerte zurücksetzen, damit keine falschen Werte angezeigt werden.

Verwandte Themen