2017-01-29 2 views
1

Das Ziel ist, wenn ich auf ein Element in der Rasteransicht klicke, sollte es eine andere Aktivität öffnen, die die Details des ausgewählten Elements zeigt. Der Wert, der an die neue Aktivität (über die .putExtra) übergeben wird, ist jedoch immer der letzte Eintrag in der Arraylist, unabhängig davon, auf welchen Eintrag ich tippe. Dies ist in der Adapterklasse BTW. wegen des OnClickListener() Satzes in onBindViewHolder Methode Danke :)Position in onBindViewHolder im Adapter gibt immer das letzte Element zurück

Der Code kann unter

@Override 
    public void onBindViewHolder(final listHolder newsHolder, final int position) { 

     currentNews = newsList.get(position); 
     listHolder.ivArt.setImageResource(currentNews.getArt()); 
     newsHolder.ivArt.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(viewGroup.getContext(), ViewNewsActivity.class); 
       intent.putExtra("list, (Parcelable) list); 
       viewGroup.getContext().startActivity(intent); 

      } 
     }); 
    } 
+0

machen Ihre 'ViewHolder' implementiert' OnClickListener' und einer der „Position“ Getter-Methode verwenden innen 'onClick' Methode – pskink

+0

warum Sie Gabe von Parametern als final sind? !! – Fakher

Antwort

0

Sie so bekommen ein seltsames Verhalten zu erkennen. Fügen Sie setOnClickListener() hinzu, um innerhalb onCreateViewHolder() anzuzeigen und new View.OnClickListener() innerhalb Adapter zu erstellen.

public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = inflater.inflate(R.layout.your_layout, parent, false); 
     view.setOnClickListener(onClickListener); 
     ... 
    } 

private View.OnClickListener onClickListener = new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      int viewPosition = recyclerView.getChildLayoutPosition(v); 
      ... 
     } 
    }; 
0

dont die Position endgültig auf Ihrem onBindViewHolder machen, denn wenn Sie alle Elemente löschen oder ein Element der ViewHolder immer noch die Referenz der alten Positionen haben hinzuzufügen, sollten Sie stattdessen mit: holder.getAdapterPosition()

0
  1. Position nicht als endgültig deklarieren.
  2. currentNews = newsList.get (Position); fügen Sie diese in der onClick Methode
Verwandte Themen