2015-09-21 15 views
9

W moim bieżącym projekcie Android używam biblioteki Butterknife do wiązania widoków i używania dla nich adnotacji onClick. To wszystko działa świetnie nawet we fragmentach, ale teraz jestem w miejscu, gdzie nie mogę znaleźć rozwiązania:Wiązanie noża SearchView z Menu

używam nowego ToolBar jako ActionBar i napompowania menu z SearchView w nim. Do tego SearchView chcę użyć adnotacji @OnTextChanged, ale gdy zadzwonię do metody wiązania z ActionView pozycji menu Butterknife spróbuję ponownie przywrócić wszystkie widoki i oczywiście w ActionView nie można znaleźć żadnych innych widoków RootLayout.

Więc czy jest jakiś sposób, aby dodać tylko jeden View z Butterknife czy mogę dostać View, która zawiera wszystkie widoki z mojego RootLayout i ToolBarView więc mogę przekazać tę celu metody wiązania? Na przykład w Activites mogę zadzwonić pod numer findViewById również w przypadku identyfikatorów menu, ale jeśli użyję getView() z mojego Fragmentu, to nie zadziała. Jakieś pomysły na to?

+0

Cechą został poproszony, aby to się stało, ale została ona odrzucona przez Jake Wharton. Zobacz wydanie [# 41] (https://github.com/JakeWharton/butterknife/issues/41) i [# 416] (https://github.com/JakeWharton/butterknife/issues/416) i powiedzieli ** Chcę skupić się na asystowaniu tylko z wyświetlanymi zdjęciami. ** – Sufian

Odpowiedz

7

Myślę, że to nie jest możliwe, ponieważ SearchView jest pozycją menu. Identyfikator, którego używasz w deklaracji menu, identyfikuje ten widok w menu, , a nie widok aktywności, to prawdopodobnie dlatego, że Butterknife nie jest w stanie go powiązać.

Obawiam się, trzeba będzie zrobić:

@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); 
}