Çok fazla yanıtın olduğunun farkındayım, ancak bunun benim uygulanmasını da sağlayabileceğimi düşündüm. (Yanıtladığım başka bir soru hakkında tüm ayrıntıları bulabilirsiniz ).
Bu nedenle, bir tıklama dinleyicisi eklemek için iç ViewHolder
sınıfınızın uygulaması gerekir View.OnClickListener
. Bir set Bunun nedeni OnClickListener
için itemView
bir parametre ViewHolder
bireyin yapıcı. Ne demek istediğimi göstereyim:
public class ExampleClickViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView text1, text2;
ExampleClickViewHolder(View itemView) {
super(itemView);
// we do this because we want to check when an item has been clicked:
itemView.setOnClickListener(this);
// now, like before, we assign our View variables
title = (TextView) itemView.findViewById(R.id.text1);
subtitle = (TextView) itemView.findViewById(R.id.text2);
}
@Override
public void onClick(View v) {
// The user may not set a click listener for list items, in which case our listener
// will be null, so we need to check for this
if (mOnEntryClickListener != null) {
mOnEntryClickListener.onEntryClick(v, getLayoutPosition());
}
}
}
Eklemeniz gereken tek şey, sizin için özel bir arayüz Adapter
ve bir ayarlayıcı yöntemidir:
private OnEntryClickListener mOnEntryClickListener;
public interface OnEntryClickListener {
void onEntryClick(View view, int position);
}
public void setOnEntryClickListener(OnEntryClickListener onEntryClickListener) {
mOnEntryClickListener = onEntryClickListener;
}
Dolayısıyla, yeni, tıklama desteklemeniz Adapter
tamamlandı.
Şimdi kullanalım ...
ExampleClickAdapter clickAdapter = new ExampleClickAdapter(yourObjects);
clickAdapter.setOnEntryClickListener(new ExampleClickAdapter.OnEntryClickListener() {
@Override
public void onEntryClick(View view, int position) {
// stuff that will happen when a list item is clicked
}
});
Temel olarak normal bir Adapter
yöntem oluşturmaktır, ancak kullanıcı belirli bir liste öğesini tıkladığında ne yapacağınızı kontrol etmek için oluşturduğunuz ayarlayıcı yönteminizi kullanmanız gerekir.
GitHub'daki bu Gist'te yaptığım bir dizi örneği de inceleyebilirsiniz:
https://gist.github.com/FarbodSalamat-Zadeh/7646564f48ee708c1582c013e1de4f07