2015-09-21 37 views
9

Nel mio progetto Android corrente utilizzo la libreria Butterknife per associare le viste e utilizzare le annotazioni onClick per esse. Tutto questo funziona alla grande anche in frammenti ma ora sono al punto in cui non riesco a trovare una soluzione:Butterknife bind SearchView from Menu

Io uso il nuovo ToolBar come ActionBar e gonfiare un menu con una SearchView in esso. Per questo SearchView voglio usare l'annotazione @OnTextChanged ma quando chiamo il metodo bind con lo Butterknife del menu Butterknife tenta di ripristinare nuovamente tutte le Visualizzazioni e ovviamente nello ActionView non è possibile trovare altre Viste dello RootLayout.

Quindi non v'è un modo per aggiungere un solo View con Butterknife o posso ottenere una vista che contiene tutti Viste dalla mia RootLayout e la ToolBarView in modo da poter passare questa vista al metodo bind? Ad esempio in Activites posso chiamare findViewById anche per ID menu, ma se uso getView() dal mio frammento non funziona. Qualche idea per questo?

+0

Una caratteristica è stato richiesto per rendere questo accada, ma è stata respinta da Jake Wharton. Si prega di consultare il problema [# 41] (https://github.com/JakeWharton/butterknife/issues/41) e [# 416] (https://github.com/JakeWharton/butterknife/issues/416) e ha detto ** Voglio mantenere questo focalizzato sull'assistenza solo con le cose viste. ** – Sufian

risposta

7

Penso che questo non sia possibile poiché SearchView è una voce di menu. L'id che stai utilizzando nella dichiarazione del menu identifica questa vista all'interno del menu, non nella vista dell'attività, probabilmente perché Butterknife non è in grado di vincolarlo.

temo che dovrete fare:

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