我有一些观点,我想将它绑定到一个片段。
我在ButterKnife.Bind(this, view)
中拨打了onCreateView
,它就像一个魅力。
但是当我打电话给ButterKnife.Bind(this, view.findViewById(R.id.view2))
时我遇到了异常。
(当然view.findViewById(R.id.view2) != null
)
为什么我不能通过ButterKnife向一个所有者注入多个视图?
编辑: 我知道我可以从一个根ViewGroup绑定视图。我对这种情况只是怀疑。在我看来,没有理由引起异常但ButterKnife却抛出异常。
答案 0 :(得分:1)
我想也许你试图在两个子View上调用ButterKnife.Bind(),而不是根ViewGroup。
根据介绍,您应该通过使用@Bind注释声明字段来绑定任何子视图,但是通过为每个子视图调用ButterKnife.Bind()来不。
只应在根ViewGroup对象上调用ButterKnife.Bind()。通过这种方式,它定义了ButterKnife将搜索视图ID的范围。
但是,如果你真的想在两个根ViewGroup上调用ButterKnife.Bind(),那么发生异常是合理的,因为根据文档,ButterKnife没有这样的用法。实际上你应该让每个Fragment / Activity类只与一个根ViewGroup相关。
答案 1 :(得分:1)
知道你的用例是什么会有所帮助,但这里有一个从一个布局绑定到局部变量的多个视图的例子。
public class FancyFragment extends Fragment {
@Bind(R.id.button1) Button button1;
@Bind(R.id.button2) Button button2;
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fancy_fragment, container, false);
ButterKnife.bind(this, view);
// Use fields here or later in the lifecycle of the fragment
return view;
}
}
如果您有两个ViewGroup作为根,那么看看结果会很有趣。您可以为每个@nullable
添加@Bind
以使其成为可选字段,然后在上述绑定调用后调用ButterKnife.Bind(this, view2)
。我不知道这是否会使未完成的视图无效或只是绑定新视图。