我在Android上使用onclickListener时遇到了问题。 我已经为onClick编写了这段代码,但在运行应用程序时,它并没有响应我的点击。 我在ViewHolder类上创建了onClick并实现了onClickListener接口。
这是我的代码:
public class AdapterLessons extends RecyclerView.Adapter<AdapterLessons.ViewHolderLessons> {
private List<Lesson> mListLessons = Collections.emptyList();
private LayoutInflater mInflater;
public Context context;
public AdapterLessons(Context context, List<Lesson> listLesson) {
mInflater = LayoutInflater.from(context);
this.mListLessons = listLesson;
this.context = context;
}
@Override
public ViewHolderLessons onCreateViewHolder(ViewGroup parent, int viewType) {
View view = mInflater.inflate(R.layout.layout_list_item_lesson, parent, false);
return new ViewHolderLessons(view,context,mListLessons);
}
@Override
public void onBindViewHolder(ViewHolderLessons holder, final int position) {
final Lesson currentLesson = mListLessons.get(position);
holder.lessonText.setText(currentLesson.getLesssonName());
if(currentLesson.get_id() % 2 == 0) {
holder.relativeLayoutLesson.setBackgroundResource(R.color.tablesecond);
}
else
{
holder.relativeLayoutLesson.setBackgroundResource(R.color.tablefirst);
}
}
@Override
public int getItemCount() {
return mListLessons.size();
}
static class ViewHolderLessons extends ViewHolder implements View.OnClickListener{
TextView lessonText;
RelativeLayout relativeLayoutLesson ;
Context context;
List<Lesson> lessonList = Collections.emptyList();
ViewHolderLessons(View itemView, Context context,List<Lesson> lessonList) {
super(itemView);
this.context = context;
this.lessonList = lessonList;
lessonText = (TextView) itemView.findViewById(R.id.lessonText);
relativeLayoutLesson = (RelativeLayout)itemView.findViewById(R.id.rlTextLesson);
}
@Override
public void onClick(View v) {
int position = getAdapterPosition();
Lesson l = lessonList.get(position);
Toast.makeText(context, l.get_id(), Toast.LENGTH_SHORT).show();
}
}
}
答案 0 :(得分:1)
在持有人的建筑师中,你忘了给他打电话:
itemView.setOnclickListener(this);
答案 1 :(得分:0)
在onBindViewHolder中尝试:
holder.relativeLayoutLesson.setTag(position);
holder.relativeLayoutLesson.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) v.getTag();
Lesson l = lessonList.get(position);
Toast.makeText(context, l.get_id(), Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
});
例如你的onBindViewHolder()应该是这样的:
@Override
public void onBindViewHolder(ViewHolderLessons holder, final int position) {
final Lesson currentLesson = mListLessons.get(position);
holder.lessonText.setText(currentLesson.getLesssonName());
if(currentLesson.get_id() % 2 == 0) {
holder.relativeLayoutLesson.setBackgroundResource(R.color.tablesecond);
}
else
{
holder.relativeLayoutLesson.setBackgroundResource(R.color.tablefirst);
}
holder.relativeLayoutLesson.setTag(position);
holder.relativeLayoutLesson.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Integer pos = (Integer) v.getTag();
Lesson l = lessonList.get(position);
Toast.makeText(context, l.get_id(), Toast.LENGTH_SHORT).show();
notifyDataSetChanged();
}
});
}
答案 2 :(得分:0)
您的适配器应将onClick事件委托给在构造函数上传递的接口。请检查此答案:Why doesn't RecyclerView have onItemClickListener()? And how RecyclerView is different from Listview?
答案 3 :(得分:0)
您可以创建自己的OnClickListener。
首先在适配器类中创建接口,或者像这样创建新文件:
public interface OnLessonClickListener{
void onLessonClick(Lesson lesson);
}
然后在适配器类中创建此接口的对象:
private OnLessonClickListener listener;
然后你需要创建初始化这个监听器的方法:
public void setOnLessonClickListener(OnLessonClickListener l){
listener = l;
}
在ViewHolder类中,您应该在itemView上设置setOnClickListener。在方法onClick上点击。
itemView.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
if(listener != null) {
listener.onLessonClick(lessonList.get(getAdapterPosition));
}
});
这个机制的结束将在类中实现你想要获得课程对象的监听器:
AdapterLessons adapter = new AdapterLessons(context, new ArrayList<Lesson>);
如果你实现了监听器:
adapter.setOnLessonClickListener(this)
如果不是:
adapter.setOnLessonClickListener(new OnLessonClickListener(){
@Override
public void onLessonClick(Lesson l){
Log.e("TAGA", "Lesson is "+l);
}
});
希望它有所帮助。
抱歉我的英文。