4

我有一些意见,我想将其绑定到一个 Fragment。我打ButterKnife.Bind(this, view)了电话onCreateView,它就像一个魅力。

但是我打电话时遇到了异常ButterKnife.Bind(this, view.findViewById(R.id.view2))。(肯定view.findViewById(R.id.view2) != null

为什么我不能通过 ButterKnife 向一个所有者注入多个视图?

编辑: 我知道我可以从一个根 ViewGroup 绑定视图。我只是怀疑这种情况。在我看来,没有理由导致异常,但 ButterKnife 抛出异常。

4

2 回答 2

1

我认为也许您正试图在两个子视图上调用 ButterKnife.Bind(),而不是根 ViewGroup。

根据介绍,您应该通过使用 @Bind 注释声明字段来将任何子视图绑定到字段,而不是通过为每个子视图调用 ButterKnife.Bind() 来绑定。

ButterKnife.Bind() 只能在根 ViewGroup 对象上调用。通过这种方式,它定义了 ButterKnife 搜索视图 ID 的范围。

但是,如果您真的想在两个根视图组上调用 ButterKnife.Bind(),那么发生异常是合理的,因为根据文档,ButterKnife 没有这样的用法。实际上,您也应该让每个 Fragment/Activity 类也只与一个根 ViewGroup 相关。

于 2015-08-09T11:19:55.183 回答
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;
  }
}

如果您有两个 ViewGroups 作为根,那么看看结果会是什么会很有趣。您可以添加@nullable到每个@Bind以使其成为可选字段,然后ButterKnife.Bind(this, view2)在上述绑定调用之后调用。我不知道这是否会使未找到的视图无效或只是绑定新视图。

于 2015-08-09T19:41:18.583 回答