我有一个回收站视图,其中显示了人员列表。我需要能够单击列表中的人员之一,并打开一个新活动。
在我的适配器中,我有以下代码:
private OnMentorClickListener listener;
public interface OnMentorClickListener {
void onMentorClick(Mentor mentor);
}
public void setOnMentorClickListener(OnMentorClickListener listener){
this.listener = listener;
}
在我的活动中,我有以下代码:
mentorAdapter.setOnMentorClickListener(new MentorAdapter.OnMentorClickListener(){
@Override
public void onMentorClick(Mentor mentor) {
Intent intent = new Intent(MentorActivity.this, MentorAddEditActivity.class);
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_ID, mentor.getMentor_id());
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_NAME, mentor.getMentor_name());
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_PHONE, mentor.getMentor_phone());
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_EMAIL, mentor.getMentor_email());
startActivityForResult(intent, EDIT_MENTOR_REQUEST);
}
});
我已经以完全相同的方式为我的应用程序的其他部分实现了侦听器,它们都可以正常工作。我已经搜索了代码,并且此设置似乎与代码的其他部分相同。
我没有任何错误,但是当我进入“导师”页面并列出所有导师时,单击任何都没有任何反应。没有错误,没有崩溃,什么都没有。
我还试图将OnMentorClickListener海峡实现为Activity类,如下所示:
public class MentorActivity extends AppCompatActivity implements MentorAdapter.OnMentorClickListener
以及在OnCreate之外覆盖:
@Override
public void onMentorClick(Mentor mentor) {
Intent intent = new Intent(MentorActivity.this, MentorAddEditActivity.class);
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_ID, mentor.getMentor_id());
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_NAME, mentor.getMentor_name());
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_PHONE, mentor.getMentor_phone());
intent.putExtra(MentorAddEditActivity.EXTRA_MENTOR_EMAIL, mentor.getMentor_email());
startActivityForResult(intent, EDIT_MENTOR_REQUEST);
}
这也不起作用。
关于我的想法,我实际上无法在RecyclerView中单击指导者?
整个MentorAdapter进行说明。这与我的所有其他适配器(为Mentor更改了变量名)尽可能相同。
public class MentorAdapter extends RecyclerView.Adapter<MentorAdapter.MentorHolder> {
private static final String TAG = AppRepository.class.getSimpleName();
private OnMentorClickListener listener;
private List<Mentor> mentorList = new ArrayList<>();
class MentorHolder extends RecyclerView.ViewHolder{
private TextView textViewMentorName;
private TextView textViewMentorPhone;
private TextView textViewMentorEmail;
MentorHolder(@NonNull View itemView) {
super(itemView);
textViewMentorName = itemView.findViewById(R.id.textView_mentor_name);
textViewMentorPhone = itemView.findViewById(R.id.textView_mentor_phone);
textViewMentorEmail = itemView.findViewById(R.id.textView_mentor_email);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int position = getAdapterPosition();
if(listener!=null&&position!=RecyclerView.NO_POSITION){
listener.onMentorClick(mentorList.get(position));
}
}
});
}
}
@NonNull
@Override
public MentorHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View itemView = LayoutInflater.from(parent.getContext())
.inflate(R.layout.mentor_item, parent, false);
return new MentorHolder(itemView);
}
@Override
public void onBindViewHolder(@NonNull MentorHolder holder, int position) {
Mentor currentMentor = mentorList.get(position);
holder.textViewMentorName.setText(currentMentor.getMentor_name());
holder.textViewMentorEmail.setText(currentMentor.getMentor_email());
holder.textViewMentorPhone.setText(currentMentor.getMentor_phone());
}
@Override
public int getItemCount() {
return mentorList.size();
}
public void setMentorList(List<Mentor> mentors){
this.mentorList = mentors;
notifyDataSetChanged();
}
public Mentor getMentorAt(int position){return mentorList.get(position);}
public interface OnMentorClickListener {
void onMentorClick(Mentor mentor);
}
public void setOnMentorClickListener(OnMentorClickListener listener){
this.listener = listener;
}
}
如果要覆盖onMentorClick
,则您的活动应实现OnMentorClickListener
接口,然后在适配器上,您应使用以下命令将活动设置为侦听器:
mentorAdapter.setOnMentorClickListener(this)
在您的代码中,您使用的是新的点击侦听器(不是活动)
mentorAdapter.setOnMentorClickListener(new MentorAdapter.OnMentorClickListener(){
@Override
public void onMentorClick(Mentor mentor) {
}
});
此外,您应该在适配器实现中的用户单击上触发onMentorClick
,最好是在onCreateViewHolder
方法中:
public YourAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent,
int viewType) {
ViewHolder holder = ViewHolder(
LayoutInflater.from(context).inflate(
R.layout.your_layout,
parent,
false
))
holder.itemView.setOnClickListener {
listener.onMentorClick(mentor)
}
return holder ;
}
在某些地方,您需要调用这些回调,如下所示:
profileView.setOnClickListener(new ....
listener.onMentorListener(mentor);
)
您的适配器中有此实现吗?