OnClick 侦听器应用于整个卡片视图,而不仅仅是 textView
Posted
技术标签:
【中文标题】OnClick 侦听器应用于整个卡片视图,而不仅仅是 textView【英文标题】:OnClick Listener to apply to the whole card view instead of just the textView 【发布时间】:2016-03-27 03:26:44 【问题描述】:我正在尝试在回收站视图中实现卡视图上的 onclick。目前我只能将卡片视图中的文本视图设置为可点击,就像我的代码显示的那样:
@Override
public void onBindViewHolder(final ShopViewHolder shopViewHolder, final int i)
shopViewHolder.shopNameTV.setText(shops.get(i).name);
shopViewHolder.categoryTV.setText(shops.get(i).category);
shopViewHolder.phoneNumberTV.setText(shops.get(i).phoneNumber);
shopViewHolder.ratingsTV.setText(shops.get(i).ratings);
shopViewHolder.emailTV.setText(shops.get(i).email);
final Shop shop = shops.get(i);
shopViewHolder.shopNameTV.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Log.d("test", "onclickk here" + i);
// Intent intent = new Intent(RVAdapter.this,CustomerGetQueueActivity.class);
) ;
现在我只能将 shopNameTV 设置为可点击,但我希望整张卡片都可点击。当我尝试使用 shopViewHolder.setOnClickListener 时,它向我显示一条错误消息“无法解析方法 setOnClickListener(anonymous.android.view.View.OnClickListener)。
如何将整个卡片设置为可点击,而不仅仅是卡片内的文本视图?
【问题讨论】:
在您的项目视图中设置点击监听器。 【参考方案1】:您正在做的是将 onClickListeners 仅应用于特定字段。这就是为什么它不适用于整体视图。你快到了,你需要做的就是。
shopViewHolder.itemView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Log.d("test", "onclickk here" + i);
//Intent intent = new Intent(RVAdapter.this,CustomerGetQueueActivity.class);
) ;
public final View itemView
它是 RecyclerView.ViewHolder 的父视图。
编辑
解决新问题,在cmets中提到:-
当您为应用程序的特定组件创建 Intent 时,您需要将应用程序或组件上下文作为第一个参数传递给 Intent 构造函数。
第 1 步:将上下文传递给 Adapter 的构造函数
public class RVAdapter extend BaseAdapter
Context mContext;
public RVAdapter(Context context, ... ) //Other parameters
mContext = context;
//Other code
第 2 步:现在使用此上下文启动新 Activity
Intent intent = new Intent(mContext, CustomerGetQueueActivity.class);
【讨论】:
嗨,谢谢你的帮助,我想通了。现在我有另一个问题,当我点击卡片时,我希望它指向另一个类,但是当我插入像 Intent intent = new Intent(RVAdapter.this,CustomerGetQueueActivity.class); 这样的代码时还有另一个错误,它说无法解析构造函数。我该如何解决这个错误? 在为应用程序的特定组件创建 Intent 时,需要将应用程序或组件上下文作为第一个参数传递给 Intent 构造函数。所以最好的选择是将上下文传递给 RVAdapter,然后将其用作new Intent(mContext, CustomerGetQueueActivity.class);
我想现在我应该得到一个赞成和接受的答案:P【参考方案2】:
将传递给您的ShopViewHolder
的view
保存为成员变量名称,例如cardView
。
然后在您的onBindViewHolder
中使用以下代码:
shopViewHolder.cardView.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
) ;
【讨论】:
以上是关于OnClick 侦听器应用于整个卡片视图,而不仅仅是 textView的主要内容,如果未能解决你的问题,请参考以下文章
CardView onClick java.lang.NullPointerException [重复]
Recyclerview cardview Onclick滚动时出现重复效果
在 Android 中以编程方式创建的多个文本视图的单个 onclick 侦听器