Butterknife如何绑定Menu中的SearchView?

12
在我的当前Android项目中,我使用Butterknife库来绑定视图并使用onClick注释。即使在片段中,这一切都运行良好,但现在我遇到了一个找不到解决方案的问题:
我使用新的ToolBar作为ActionBar,并膨胀一个Menu,其中包含一个SearchView。对于这个SearchView,我想使用@OnTextChanged注释,但当我使用菜单项的ActionView调用bind方法时,Butterknife将尝试重新实例化所有视图,并且当然在ActionView中找不到任何其他RootLayout的视图。
那么是否有一种方式可以添加只包含根布局和ToolBarView中所有视图的一个View,以便我可以将此View传递给bind方法?例如,在活动中,我可以调用findViewById也适用于菜单ID,但如果我从Fragment使用getView()则不起作用。有关此的任何想法?

1
有人提出了一个功能请求,但被Jake Wharton拒绝了。请参见问题#41#416,并表示“我希望将其专注于仅协助处理与视图相关的事情。” - Sufian
1个回答

9

我认为这是不可能的,因为SearchView是菜单项。您在菜单声明中使用的ID标识了菜单中的此视图,而不是活动视图,这可能是Butterknife无法绑定它的原因。

恐怕您需要执行以下操作:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.bookings_list_menu, menu);
    SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView();

    searchView.setOnSearchClickListener(...);
    searchView.setOnCloseListener(...);
    searchView.setOnQueryTextListener(...);

    super.onCreateOptionsMenu(menu, inflater);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接