Har noen som bruker RecyclerView
funnet en måte å sette en onClickListener
til elementer i RecyclerView
?
Jeg tenkte å sette en lytter til hvert av oppsettene for hvert element, men det virker litt for mye bry ...
Jeg er sikker på at det er en måte for RecyclerView
å lytte etter onClick
-hendelsen, men jeg kan ikke helt finne ut av det.
Ettersom API-ene har endret seg radikalt, ville det ikke overraske meg om du skulle opprette en "OnClickListener" for hvert element. Det er ikke så mye av et problem skjønt. I din implementering av RecyclerView.Adapter<MyViewHolder>
, bør du ha:
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);
}
Metoden 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();
}
Sjekk ut et lignende spørsmål @CommonsWare's kommentar lenker til dette, som implementerer OnClickListener
grensesnittet i `viewHolder``.
Her er et enkelt eksempel på 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++){
}
}
}
Adapter
ser da slik ut:
@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);
}
Dette er hva jeg endte opp med å trenge, i tilfelle noen finner det nyttig:
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());
}
});
}
}
Kilde: http://blog.csdn.net/jwzhangjie/article/details/36868515