Heeft iemand die RecyclerView
gebruikt een manier gevonden om een onClickListener
in te stellen voor items in de RecyclerView
?
Ik dacht aan het instellen van een luisteraar op elk van de lay-outs voor elk item, maar dat lijkt een beetje te veel gedoe
Ik weet zeker dat er een manier is om de RecyclerView
te laten luisteren naar de onClick
gebeurtenis maar ik kan het niet helemaal achterhalen.
Aangezien de API's radicaal veranderd zijn, zou het me niet verbazen als je voor elk item een OnClickListener
zou maken. Het is echter niet zo'n gedoe. In je implementatie van RecyclerView.Adapter<MyViewHolder>
, zou je moeten hebben:
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);
}
De 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();
}
Kijk eens naar een soortgelijke vraag @CommonsWare's commentaar linkt naar deze, die de `OnClickListener
interface implementeert in de `viewHolder``.
Hier's een eenvoudig voorbeeld van de `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++){
}
}
}
De `Adapter
ziet er dan als volgt uit:
@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);
}
Dit is wat ik uiteindelijk nodig had, voor het geval iemand het nuttig vindt:
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());
}
});
}
}
Bron: http://blog.csdn.net/jwzhangjie/article/details/36868515