butterknife怎么绑定多个view

View view = View.inflate(context, R.layout.news_item_pager, null);
ButterKnife.bind(this, view);
View rollView = View.inflate(context, R.layout.layout_roll_view, null);
ButterKnife.bind(this,rollView);

这样写为什么报错 butterknife怎么绑定多个view?

阅读 6.2k
5 个回答

你是说调用ButterKnife.bind()时报错吗?

首先要知道 ButterKnife.bind 的参数都是什么作用。第一个参数一般是定义需要绑定 View 的类。例如 ActivityFragment 或者 ViewHolder 即普通的类,只要是一个对象,类中有定义 @Bind 的注解都是可以工作的。

第二个参数则是 ViewFinder,也就是 findViewById 方法的 receiver,它可以是 Activity 或者 View

还有一种情况是 Activity 类中定义了 @Bind,这样 Activity 对象就既是 View 定义者又是 ViewFinder,所以只需要传入一个参数就可以了。

我猜楼主的意思是一次性绑定多个 ViewFinderView?这样的方法是不存在也不允许的,因为一个类中定义的@Bind的 id 可能和其他 view 中定义的有重复,这种情况一般是定义多个 ViewHolder 来在一个类中使用。

比如:

class ViewHolder1 {
    @Bind(R.id.text1)
    TextView text1;
}

class ViewHolder2 {
    @Bind(R.id.text2)
    TextView text2;
}

ViewHolder1 holder1 = ...;
ViewHolder1 holder2 = ...;

ButterKnife.bind(holder1, view1);
ButterKnife.bind(holder2, view2);

在同一个类中绑定了多个View的情况下,注解处理器会在每一个View中寻找绑定引用对应的id名,找不到就会报错。
建议不要在同一个类中绑定多个View,可以在内部类中绑定

绑定多个View需要在注解里面写

写法如下:

@BindViews({R.id.view_1, R.id.view_2, R.id.view_3, R.id.view_4, R.id.view_5})
List<View> viewList;

谢谢各位,明白了

新手上路,请多包涵

有时间问这个问题 还不如去看看官方api。。。总共也就那么多

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