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】:

将传递给您的ShopViewHolderview 保存为成员变量名称,例如cardView

然后在您的onBindViewHolder 中使用以下代码:

shopViewHolder.cardView.setOnClickListener(new View.OnClickListener() 

        @Override
        public void onClick(View v) 

        
) ;

【讨论】:

以上是关于OnClick 侦听器应用于整个卡片视图,而不仅仅是 textView的主要内容,如果未能解决你的问题,请参考以下文章

CardView onClick java.lang.NullPointerException [重复]

Recyclerview cardview Onclick滚动时出现重复效果

如何从 onclick 侦听器单击的项目中检索数据

在 Android 中以编程方式创建的多个文本视图的单个 onclick 侦听器

片段内 Listview 中动态视图的 onClick 侦听器

如何为我在回收站视图中的卡片视图中的每个项目创建一个点击监听器