首页 文章

如何为不同的viewHolders创建一个OnClick侦听器

提问于
浏览
0

我的RecyclerView中有不同的视图持有者 . 在onCreateViewHolder中,我检查viewType然后返回相应的viewHolder

public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        this.mContext = parent.getContext();
        switch (viewType)
        {
            case ITEM_TYPE_HEADER_MAIN:
                return new ViewHolderHeaderMain(MainHeaderView.newInstance(parent));

            case ITEM_VIEW_TYPE_DEFAULT:
                return new ViewHolderDefualt(LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.card_list, parent, false), this.mContext);

            case ITEM_VIEW_TYPE_CUSTOM:
                return new ViewHolderCustom(LayoutInflater.from(parent.getContext())
                        .inflate(R.layout.story_custom_layout, parent, false), this.mContext);
            default:
                throw new IllegalArgumentException();
        }
    }

和:

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        final StoryModel storyModel = this.mStories.get(position);
        final StoryModel topStory = this.mTopStory;
        if (holder instanceof ViewHolderHeaderMain) {
            ViewHolderHeaderMain viewHolderHeaderMain = (ViewHolderHeaderMain) holder;
            viewHolderHeaderMain.getMainHeaderView().setTopStories(this.mTopStory);

        } else if (holder instanceof ViewHolderDefault){
            ViewHolderDefault viewHolderDefault = (ViewHolderDefault) holder;
            viewHolderDefault.bindStory(this.mStories.get(position));
        } else if (holder instanceof ViewHolderCustom){
            ViewHolderCustom viewHolderCustom = (ViewHolderCustom) holder;
            viewHolderCustom.bindStory(this.mStories.get(position));
        }

这三个viewHolders具有相同的Clickable视图,如TextView for title,description和ImageButton for overflow menu和ImageView for image . 在那些viewHolders中,我执行数据绑定的视图(不在onBindViewHolder中) .

现在,当谈到onClickListeners时,我必须在每个ViewHolder中实现View.onClickListener .

我的问题是:有没有办法为这些可点击的视图设置一个方法,并为每个视图分配OnClickListener而不是在每个viewHolder中重复相同的方法?

喜欢:

private void setupClickableViews(final View view, final ViewHolderHeaderMain viewHolderheaderMain) {
        viewHolderheaderMain.tvTitle.setOnClickListener(new View.OnClickListener() {
    ...

我应该在哪里为三个视图持有者定义三种相同的方法 .

有什么建议?

2 回答

  • 0

    让所有视图继承自具有可点击视图的公共抽象父级附加点击侦听器 .

    abstract class CommonViewHolder {
      TextView title;
      TextView desc;
      ImageButton menuButton;
      CommonViewHolder() {
        title.setOnClickListener(...);
        desc.setOnClickListener(...);
        menuButton.setOnClickListener(...);
      } 
    }
    
    class ViewHolderMain extends CommonViewHolder {
    ...
    }
    
    class ViewHolderDefault extends CommonViewHolder {
    ...
    }
    
    class ViewHolderCustom extends CommonViewHolder {
    ...
    }
    
  • 0

    您可以在XML布局中为所有相关视图添加 android:onClick="activityOnClick" ;然后将调用包装Activity的 public void activityOnClick(View view) 方法 .

相关问题