Hat jemand, der RecyclerView
verwendet, eine Möglichkeit gefunden, einen onClickListener
für Elemente in der RecyclerView
zu setzen?
Ich dachte daran, einen Listener für jedes der Layouts für jedes Element zu setzen, aber das scheint ein bisschen zu viel Aufwand zu sein
Ich bin mir sicher, dass es einen Weg gibt, wie der RecyclerView
auf das onClick
-Ereignis hören kann, aber ich kann es nicht herausfinden.
Da sich die API's radikal verändert haben, würde es mich nicht überraschen, wenn Sie für jedes Element einen "OnClickListener" erstellen würden. Das ist aber kein großer Aufwand. In Ihrer Implementierung von RecyclerView.Adapter<MyViewHolder>
, sollten Sie haben:
private final OnClickListener mOnClickListener = new MyOnClickListener();
@Override
public MyViewHolder onCreateViewHolder(final ViewGroup parent, final int viewType) {
View view = LayoutInflater.from(mContext).inflate(R.layout.myview, parent, false);
view.setOnClickListener(mOnClickListener);
return new MyViewHolder(view);
}
Die onClick
Methode:
@Override
public void onClick(final View view) {
int itemPosition = mRecyclerView.getChildLayoutPosition(view);
String item = mList.get(itemPosition);
Toast.makeText(mContext, item, Toast.LENGTH_LONG).show();
}
Schauen Sie sich eine ähnliche Frage an. @CommonsWare's Kommentar verweist auf dies, das die Schnittstelle OnClickListener
im `viewHolder`` implementiert.
Hier's ein einfaches Beispiel für den `ViewHolder
:
TextView textView;//declare global with in adapter class
public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
textView = (TextView)view.findViewById(android.R.id.text1);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "position = " + getLayoutPosition(), Toast.LENGTH_SHORT).show();
//go through each item if you have few items within recycler view
if(getLayoutPosition()==0){
//Do whatever you want here
}else if(getLayoutPosition()==1){
//Do whatever you want here
}else if(getLayoutPosition()==2){
}else if(getLayoutPosition()==3){
}else if(getLayoutPosition()==4){
}else if(getLayoutPosition()==5){
}
//or you can use For loop if you have long list of items. Use its length or size of the list as
for(int i = 0; i<exampleList.size(); i++){
}
}
}
Der `Adapter
sieht dann wie folgt aus:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view =LayoutInflater.from(parent.getContext()).inflate(android.R.layout.simple_list_item_1, parent, false);
return new ViewHolder(view);
}
Dies ist, was ich letztendlich brauchte, für den Fall, dass jemand es nützlich findet:
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(View item) {
super(item);
item.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("RecyclerView", "onClick:" + getAdapterPosition());
}
});
}
}
Quelle: http://blog.csdn.net/jwzhangjie/article/details/36868515