如何将OnClickListner添加到CardView? [英] How to add OnClickListner to CardView?
问题描述
我正在使用RecyclerView
和CardView
.我想将OnClickListner
附加到每张卡上.我尝试了许多关于stackoverflow的答案,但是它们对我不起作用.到目前为止,我已经尝试过-
I am working with RecyclerView
and CardView
. I want to attach OnClickListner
to each card. I tried with many answers available on stackoverflow, but they are not working for me. So far I have tried -
public class SubjectAdapter extends RecyclerView.Adapter<SubjectAdapter.ViewHolder> implements View.OnClickListener,
View.OnLongClickListener{
private static final String LOGCAT = "SubjectAdapter";
private final Context mContext;
List<Subject> SubjectsList;
public SubjectAdapter(Context context) {
super();
this.mContext = context;
SQLiteDatabase.loadLibs(mContext);
DBHelper myDbHelper = new DBHelper(mContext);
SubjectsList = new ArrayList<Subject>();
SubjectsList = myDbHelper.getAllSubjects();
myDbHelper.close();
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext())
.inflate(R.layout.subject_cardview_row, viewGroup, false);
ViewHolder viewHolder = new ViewHolder(v);
// Below two lines are NOT working
viewHolder.tvSubjectName.setOnClickListener(this);
//viewHolder.setOnClickListener(this);
return viewHolder;
}
@Override
public void onBindViewHolder(ViewHolder viewHolder, int i) {
Subject subject = SubjectsList.get(i);
viewHolder.tvSubjectName.setText(subject.getSubject_Name());
viewHolder.tvCounts.setText(String.valueOf(subject.getSubject_Number_of_Questions()));
// Below two lines are NOT working
viewHolder.tvSubjectName.setOnClickListener(this);
//viewHolder.setOnClickListener(this);
}
@Override
public int getItemCount() {
return SubjectsList.size();
}
@Override
public void onClick(View v) {
// It's not working either
ViewHolder holder = (ViewHolder) v.getTag();
int position = holder.getPosition();
if (v.getId() == holder.tvSubjectName.getId()){
Log.d(LOGCAT, "tvSubjectName onClick at" + position);
//Toast.makeText(mContext, "tvSubjectName onClick at" + position, Toast.LENGTH_LONG).show();
} else {
Log.d(LOGCAT, "RecyclerView Item onClick at " + position);
//Toast.makeText(mContext, "RecyclerView Item onClick at " + position, Toast.LENGTH_LONG).show();
}
}
@Override
public boolean onLongClick(View v) {
return false;
}
class ViewHolder extends RecyclerView.ViewHolder {
public TextView tvSubjectName;
public TextView tvCounts;
public ViewHolder(View itemView) {
super(itemView);
tvSubjectName = (TextView) itemView.findViewById(R.id.tv_subject_name);
tvCounts = (TextView) itemView.findViewById(R.id.tv_text_counts);
}
}
}
正如人们所看到的,我尝试将setOnClickListener
与onCreateViewHolder
和onBindViewHolder
同时用作单独的onClick
,但是它们似乎都不对我有用.因此,我想知道,如何将OnClickListner添加到CardView?
As one can see, I have tried setOnClickListener
with both onCreateViewHolder
and onBindViewHolder
, also as separate onClick
, but none of them seems to be working for me. So, I want to know, How to add OnClickListner to CardView?
推荐答案
onClick返回的视图不一定与回收者视图的视图"行层次结构相对应. 我认为您应该用
View returned by onClick does not necessarily correspond to View row hierarchy of the recycler view.
I think you should modify onBindViewHolder
with
@Override
public void onBindViewHolder(final ViewHolder viewHolder, final int i) {
final Subject subject = SubjectsList.get(i);
viewHolder.tvSubjectName.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
Log.d(LOGCAT, "tvSubjectName onClick at" + i);
// etc
}
});
...
}
如果使用长按,则将View.OnClickListener
替换为View.OnLongClickListener
,将onClick
替换为onLongClick
.
If you use long click then replace View.OnClickListener
with View.OnLongClickListener
and onClick
with onLongClick
.
这篇关于如何将OnClickListner添加到CardView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!