Voici ma solution si elle pouvait aider quelqu'un.
Vous pouvez cliquer sur un élément de la vue de recyclage ou sur l'un des deux boutons.
L'interface met en œuvre:
onStudentItemClick, pour cliquer dans l'item de recyclerview
onChatItemClick et onAbsenceItemClick pour cliquer sur les boutons
Avec
holder.imgChat.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mOnClickListener.onChatItemClick(mStudents.get(index));
}
});
Je mets l'écouteur d'un clic pour un bouton
Et dans la StudentViewHolder classe je mets en œuvre OnClickListener et passer outre onClik
@Override
public void onClick(View v) {
if (mOnClickListener != null){
int clickedPosition = getAdapterPosition();
mOnClickListener.onStudentItemClick(mStudents.get(clickedPosition));
}
}
Voici l'adaptateur:
public class StudentsAdapter extends RecyclerView.Adapter<StudentsAdapter.StudentsViewHolder> {
private ListItemClickListener mOnClickListener;
private ArrayList<Student> mStudents;
public interface ListItemClickListener {
void onStudentItemClick(Student student);
void onChatItemClick(Student student);
void onAbsenceItemClick(Student student);
}
public StudentsAdapter(ArrayList<Student> students, ListItemClickListener listener) {
mStudents = students;
mOnClickListener = listener;
}
@Override
public StudentsViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Context context = viewGroup.getContext();
int layoutIdForListItem = R.layout.student_list_item;
LayoutInflater inflater = LayoutInflater.from(context);
boolean shouldAttachToParentImmediately = false;
View view = inflater.inflate(layoutIdForListItem, viewGroup, shouldAttachToParentImmediately);
StudentsViewHolder viewHolder = new StudentsViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(StudentsViewHolder holder, int position) {
final Integer index = position;
holder.tvStudent.setText(mStudents.get(position).nameForList());
holder.imgChat.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mOnClickListener.onChatItemClick(mStudents.get(index));
}
});
holder.imgAbsence.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mOnClickListener.onAbsenceItemClick(mStudents.get(index));
}
});
}
public Student getItem(Integer position){
return mStudents.get(position);
}
@Override
public int getItemCount() {
return mStudents.size();
}
class StudentsViewHolder extends RecyclerView.ViewHolder
implements OnClickListener {
ImageView imgStudent;
TextView tvStudent;
ImageButton imgChat, imgAbsence;
public StudentsViewHolder(View itemView) {
super(itemView);
imgStudent = (ImageView) itemView.findViewById(R.id.img_student);
tvStudent = (TextView) itemView.findViewById(R.id.tv_student);
imgChat = (ImageButton) itemView.findViewById(R.id.btn_chat_student);
imgAbsence = (ImageButton) itemView.findViewById(R.id.btn_absence);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (mOnClickListener != null){
int clickedPosition = getAdapterPosition();
mOnClickListener.onStudentItemClick(mStudents.get(clickedPosition));
}
}
}
}
Fragment l'implémentent l'interface:
public class SubjectDetailFragment extends Fragment implements StudentsAdapter.ListItemClickListener {
...
@Override
public void onStudentItemClick(Student student) {
StudentDetailFragment detailFragment = StudentDetailFragment.newInstance();
Bundle bundle = new Bundle();
bundle.putParcelable("student", student);
detailFragment.setArguments(bundle);
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.frame_layout, detailFragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
@Override
public void onChatItemClick(Student student) {
...
}
@Override
public void onAbsenceItemClick(Student student) {
...
}
Vous pouvez utiliser setTag et getTag, lorsque vous définissez votre balise set de boutons pour d'abord comme 1 et 2 autres, et ensuite vous pouvez différencier en appelant v.getTag() – dali