Q:

RecyclerView onItemClick() imitation, is it good practice?

I saw some different ways of implementing onItemClickListener for RecyclerView. My favourite is to use interface callback: 
Interface: 
public interface OnClickListener {

    void onCardClick(View v);

    void onFavouriteButtonClick(View v);

    void onRemoveClick(View v);

    //Other  clickable areas 
}

In adapter: 
currentView.favouriteButton.setTag(currentItem.getId());
currentView.favouriteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if (OnClickListener != null){
                        OnClickListener.onFavouriteButtonClick(v);
                    }
                }
            });

In main activity/fragment 
adapter = new CardAdapter( .... new OnClickListener() {
                @Override
                public void onFavouriteButtonClick(View v) {
                    int id = Integer.parse(v.getTag().toString());
                    //Do your stuff
                }
                ....
}); 

So, I have some questions:

is it good way of handling things?  
will performance be slow if number of items will grow?  
any reasons why I shouldn't use this approach?

A:

I think you could improve upon this by not passing the view outside of the adapter.
// Create an object that encapulates the information for each card
public class CardInfo {
    // Whatever you want to show in your card
}

// Create a listener for items instead of views
public interface OnCardAction {
    void onCardSelected(CardInfo cardInfo);

    void onFavoriteSelected(CardInfo cardInfo);

    void onCardRemoved(CardInfo cardInfo);
}

// In your adapter
favoriteButton.setOnClickListener(new View.OnClickListener(){
    @Override
    public void onClick(View v){
        // You many need to check if onCardActionLisetner is null
        CardInfo cardInfo = getItemAt(viewHolder.getAdapterPosition());
        onCardActionListener.onFavoriteSelected(cardInfo);
    }
});

NOTE: If you are passing the listener in the constructor can either make it required (throw error if it is null) or not even create View.OnClickListner to reduce the number of null checks. 

