Qualcuno che usa RecyclerView
ha trovato un modo per impostare un onClickListener
agli elementi nella RecyclerView
?
Ho pensato di impostare un listener per ogni layout per ogni elemento, ma questo sembra un po' troppo complicato.
Sono sicuro che c'è un modo per la RecyclerView
di ascoltare l'evento onClick
ma non riesco a capirlo.
Dato che le API sono cambiate radicalmente, non mi sorprenderebbe se tu dovessi creare un OnClickListener
per ogni elemento. Non è una gran seccatura però. Nella tua implementazione di RecyclerView.Adapter<MyViewHolder>
, dovresti avere:
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);
}
Il metodo onClick
:
@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();
}
Controlla una simile domanda @CommonsWare's link a questo, che implementa l'interfaccia OnClickListener``` nel `viewHolder
.
Ecco un semplice esempio di 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++){
}
}
}
L'Adattatore
si presenta così:
@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);
}
Questo è ciò di cui ho finito per aver bisogno, nel caso qualcuno lo trovi utile:
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());
}
});
}
}
Fonte: http://blog.csdn.net/jwzhangjie/article/details/36868515