如何在RecyclerView中设置onClick on cards?

时间:2016-03-26 17:06:12

标签: java android onclick adapter

我已经使用卡片实现了回收站视图,我想在每张卡片上实现onClick功能。基本上我有两个类,MainActivity和RVAdapter类。

这就是我在Adapter类中实现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);
        }
    }) ;
}

在包含卡片的xml文件中:

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:padding="16dp"
    android:onClick="onBindViewHolder"
    >
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/shopnameTV"
        />

然而,问题是,当我点击卡片时,它会引导我发出错误信息,指出onBindViewHolder不在主活动类中。

如何解决此错误?或者如何在onClick?

之后将变量传递给RVAdapter类而不是Main活动类

1 个答案:

答案 0 :(得分:0)

android:onClick属性仅在托管视图的Activity中存在指定方法时才有效。因此,在您的情况下,Android将使用此签名在活动上查找方法来处理点击:

public void onBindViewHolder(View v)

您看到的错误表明Android无法找到此方法。

相反,从视图XML中删除onClick属性并在卡片视图本身上注册一个单击侦听器,类似于您在shopViewHolder.shopNameTV中所做的操作。