RecyclerView onItemClick()模仿,是不是很好的做法?

时间:2016-05-03 14:57:43

标签: android android-recyclerview

我看到了为RecyclerView实现onItemClickListener的一些不同方法。我最喜欢的是使用接口回调:

界面:

public interface OnClickListener {

    void onCardClick(View v);

    void onFavouriteButtonClick(View v);

    void onRemoveClick(View v);

    //Other  clickable areas 
}

在适配器中:

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

在主要活动/片段

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

所以,我有一些问题:

  1. 这是处理事情的好方法吗?
  2. 如果项目数量增加,
  3. 表现会变慢吗?
  4. 为什么我不应该使用这种方法?

1 个答案:

答案 0 :(得分:0)

我认为你可以通过不在适配器之外传递视图来改进这一点。

// 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);
    }
});

注意:如果您在构造函数中传递侦听器,则可以使其成为必需(如果为null则抛出错误),或者甚至不创建View.OnClickListner以减少空值检查的数量。