2016-03-30 13 views

Antwort

0

Sie müssen zuerst verstehen, wie RecyclerView funktioniert.

Während Sie durch die Zellen blättern, werden die Ansichten, die den Bildschirm verlassen, RECYCLED, und sie werden anschließend wiederverwendet, um die eingehenden Ansichten anzuzeigen. Daher der Name RecyclerView. Auf diese Weise werden Ansichten immer wiederverwendet und wiederverwendet, wodurch Speicher gespart wird.

Was Sie tun müssen, ist so etwas wie dieses:

@Override 
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) { 
    //mList and mSelectedObjects are array lists 
    View yourView = holder.itemView.findViewById(R.id.your_view); 
    Object object = mList.get(position); 
    yourView.setTag(object); 
    yourView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Object object = (Object) v.getTag(); 
      if (mSelectedObjects.contains(object)) { 
       mSelectedObjects.remove(object); 
       v.setBackground(null); 
      } else { 
       mSelectedObjects.add(object); 
       v.setBackgroundColor(Color.GRAY); 
      } 
     } 
    }); 
} 
+0

Dank Jagoan Neon. genau weiß ich nicht, wie ich meinen Code anpassen soll. Wie auch immer, ich danke dir wirklich. –

0

Wenn Sie programmatisch die Hintergrundfarbe festgelegt. Sie müssen jedes Mal die normale Farbe und die ausgewählte Farbe einstellen.

RecyclerViews verwenden ihre Ansichten erneut. Wenn ein Artikel den Bildschirm verlässt, wird er wiederverwendet, um die Leistung der Recycleransicht zu erhöhen.

In diesem Fall, wenn man programmgesteuert eine Hintergrundfarbe und das Element den Bildschirm verlässt. Es wird in dem neuen Objekt wiederverwendet und die Hintergrundfarbe ist immer noch die gleiche wie wenn das Objekt den Bildschirm verlassen hat.

+0

ich es nicht verarbeiten kann .... ㅠㅠ –

Verwandte Themen