RecyclerViewkullanan herhangi biri
RecyclerViewiçindeki öğelere bir
onClickListenerayarlamanın bir yolunu buldu mu? Her bir öğe için her bir düzene bir dinleyici ayarlamayı düşündüm ama bu biraz fazla zahmetli görünüyor Eminim ki
RecyclerView' için `onClick' olayını dinlemenin bir yolu vardır ama ben bunu tam olarak çözemiyorum.
API'ler kökten değiştiğinden, her öğe için bir OnClickListener
oluşturmanız beni şaşırtmaz. Yine de o kadar da zor değil. RecyclerView.Adapter
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);
}
onClick` yöntemi:
@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();
}
Benzer bir soru @CommonsWare'in yorum bağlantılarına göz atın bu, viewHolder
da OnClickListener
arayüzünü uygular.
İşte basit bir ViewHolder
örneği:
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++){
}
}
}
Bu durumda Adapter
aşağıdaki gibi görünür:
@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);
}
Birilerinin işine yaraması ihtimaline karşı benim ihtiyacım olan şey buydu:
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());
}
});
}
}
Kaynak: http://blog.csdn.net/jwzhangjie/article/details/36868515