对Viewholder使用ButterKnife的疑惑

看到一个项目中使用了ButterKnife这个工具,

在创建Viewholder的部分代码:

    public FaxianCenterViewHolder(View itemView) {
        super(itemView);
        ButterKnife.inject(this, itemView);
        mDatas = FaxianData.createDatas();
        initData();

        mTv.setOnClickListener(this);
        mIvArrow.setOnClickListener(this);
    }

这里的ButterKnife.inject(this, itemView);到底是干嘛呢?起到什么作用?

如果不用这个工具,用一般的写法怎么写呢?

求解决疑惑。官方文档对这部分似乎也没有写。

没有学习MVC设计模式,对注入的概念也不是很懂

阅读 5.6k
2 个回答

当依赖的jar是butterknife-6.1.0.jar时大家普遍用ButterKnife.bind(this),因为这个包中根本就没有ButterKnife.inject(this)或者ButterKnife.inject(this, view)方法,当依赖的jar是butterknife-7.0.1.jar时会有ButterKnife.inject(this)或者ButterKnife.inject(this, view),而且一般也都这样写。
方法的意思大概就是绑定布局,以达到各种注解能够找到相应控件,例:@Bind(R.id.title) TextView title;
@OnClick(R.id.submit)
public void sayHi(Button button) {button.setText("Hello!");}
你这样理解就好了。

看下文档就好了,http://jakewharton.github.io/...

  static class ViewHolder {
    @BindView(R.id.title) TextView name;
    @BindView(R.id.job_title) TextView jobTitle;

    public ViewHolder(View view) {
      ButterKnife.bind(this, view);
    }
  }

ButterKnife.inject(this, itemView);应该是老的写法,新版更新为bind了,用法差不都。

印象中inject应该是14、15年前的用法?

不用ButterKnife那就自己写样板代码

mTv = findViewById();
mTv.setOnClickListener(this);

使用 @onClick 也可以绑定;

话说在 Holder 里面设置点击事件,那怎么定位到具体的 Item 呢?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题