2016-06-08 21 views
2

In der folgenden Code 'setlisteners' Methode wird jedes Mal aufgerufen, soll Wert der Position ändern? Es gibt nur einen method'setlisteners'in dem die Parameterposition übergeben wird, aber wenn ich log, sehe ich, dass, wann immer click event auf meinen Buttons passiert, es die korrekte Position anzeigt. Sollte sich die Position nicht selbst überschreiben und eine falsche Position anzeigen, da ein Klickereignis jederzeit eintreten kann, bis dahin hat sich der Wert der Position geändert?klicken Sie auf Listener in OnBindViewholder Recyclerview android

nehmen wir an 5 Ansichten binded wurden und i klicken Sie auf den ersten itemview, dann should'nt es mir die letzte Position des letzten itemview binded gehalten zeigen?

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 


    setListeners(holder,position); 


    } 

private void setListeners(ViewHolder holder, final int position) { 
     holder.updownarrow.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Log.e("ddfg",""+position); 

      } 
     }); 
     holder.leftlayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

      } 
     }); 
    } 

Position wird die Position des letzten Halter halten, die in onBindViewHolder binden war, da meine Ansicht nicht onBindViewHolder nicht anrufen, wenn ich darauf klicke, should'nt die Position letzte binded Position halten und zeigen nur diese eine Position, wenn eine Ansicht angeklickt wird?

Antwort

1

Die Position in onBindViewHolder ist das gleiche wie die Position in Ihrem Adapter/Datensatz. Ihr Click Listener wird mit dem position der einzelnen ViewHolder in Ihrem Datensatz zum Zeitpunkt der Bindung dargestellt. Obwohl das click -Ereignis erst aufgerufen wird, nachdem alle Ansichten verknüpft wurden, wurde jede Funktionsinstanz bereits so eingerichtet, dass sie die entsprechende Position verwendet, für die jede Ansicht festgelegt wurde.

Wenn jede Ansicht dieselbe Instanz eines Klick-Listeners verwendet, erhalten Sie nur die letzte Position. Jede Ansicht enthält jedoch eine eigene Instanz eines Klick-Listeners.

0

Nein, position wird die Position des letzten Halters hält, die ist in onBindViewHolder war, da Ihre View nicht onBindViewHolder nicht anrufen, wenn Sie darauf klicken.

Es gibt viele Möglichkeiten, um die richtige Position zu holen - zum Beispiel, wenn Sie & legen Sie die Position in den Viewstag oder nach den umgebenden ViewHolder bekommen und prüfen ihre Position im Adapter oder Layout.

+0

Sie haben gesagt: "Position wird die Position des letzten Halters halten, der in onBindViewHolder gebunden wurde". Dann nehmen wir an, dass 5 Ansichten verknüpft wurden und ich auf die erste Objektansicht klicke, dann sollte sie mir nicht die letzte gehaltene Position anzeigen nach der letzten abgebundenen Artikelansicht? – user6265154

+0

Ja, sollte es tun. Dies bedeutet jedoch nicht, dass Ihr letzter Listeneintrag die letzte gebundene Ansicht ist. – yennsarah

0

Verwenden Sie nicht die Position in onBindViewHolder. verwende diese:

final int adapterPosition = viewholder.getAdapterPosition(); 
// do what ever with it 
Verwandte Themen