2016-03-26 7 views
0

私はカードでリサイクラービューを実装しており、各カードにonClick関数を実装したいと考えています。基本的には、MainActivityクラスとRVAdapterクラスの2つのクラスがあります。カードが含まれている私のXMLファイルにRecyclerViewで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); 
     } 
    }) ; 
} 

これは私がアダプタクラス内のonclickの機能を実装する方法である

<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の後にMainアクティビティクラスの代わりにRVAdapterクラスに渡すのですか?

答えて

0

android:onClickプロパティは、名前付きメソッドがビューをホストしているアクティビティに存在する場合にのみ機能します。だからあなたの場合には、Androidのは、クリックを処理するために、この署名で活動に方法を探すために起こっている:

public void onBindViewHolder(View v) 

あなたが見ているエラーがAndroidは、この方法を見つけることができないことを示しています。

代わりに、viewViewHolder.shopNameTVで行っているのと同様に、ビューXMLからonClickプロパティを削除し、カードビュー自体にクリックリスナーを登録します。

関連する問題