Έχει βρει κανείς που χρησιμοποιεί το RecyclerView
έναν τρόπο να ορίσει ένα onClickListener
σε αντικείμενα στο RecyclerView
;
Σκέφτηκα να ορίσω έναν ακροατή σε κάθε διάταξη για κάθε στοιχείο, αλλά αυτό φαίνεται να είναι λίγο δύσκολο.
Είμαι σίγουρος ότι υπάρχει τρόπος να ακούει το RecyclerView
το συμβάν onClick
αλλά δεν μπορώ να το καταλάβω.
Καθώς το API's έχει αλλάξει ριζικά, Δεν θα με εξέπληττε αν έπρεπε να δημιουργήσετε έναν OnClickListener
για κάθε στοιχείο. Ωστόσο, δεν είναι τόσο μεγάλη ταλαιπωρία. Στην υλοποίησή σας του RecyclerView.Adapter<MyViewHolder>
, θα πρέπει να έχετε:
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
:
@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();
}
Ελέγξτε μια παρόμοια ερώτηση @CommonsWare's σχόλιο συνδέει με αυτό, το οποίο υλοποιεί τη διεπαφή `OnClickListener
στο viewHolder
.
Ακολουθεί ένα απλό παράδειγμα του `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++){
}
}
}
Ο `Ανταπτορας
τότε μοιάζει με αυτό:
@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);
}
Αυτό κατέληξα να χρειάζομαι, σε περίπτωση που κάποιος το βρει χρήσιμο:
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());
}
});
}
}
Πηγή: http://blog.csdn.net/jwzhangjie/article/details/36868515