Android abs с SearchView, onQueryTextListener не работает

Я пытаюсь использовать версию SearchView Support v4 с помощью sherlock.

Поэтому у меня есть кнопка поиска в панели действий ->, когда я прикасаюсь к клавиатуре и к поисковому бару тоже.

Моя проблема в том, что мне нужно использовать слушателей onQueryTextSubmit и onQueryTextChange, но они никогда не запускаются. Мне нужно использовать строку поискового запроса и делать с ней специальные вещи.

Вот полная активность.java

public class ActivityMain extends SherlockFragmentActivity implements OnQueryTextListener, DialogFragmentListener { /** * PRIVATE ATTRIBUTES */ private static final String TAG = "ActivityMain"; private ViewPager _viewPager; private TabsAdapter _tabsAdapter; private DialogFiltre _dialogFiltre; private String _searchCurrentQuery; // data private boolean _doubleBackToExitPressedOnce = false; @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); switch ((int) _viewPager.getCurrentItem()) { case 0: getSupportMenuInflater().inflate(R.menu.empty_menu, menu); break; case 1: getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu); break; case 2: getSupportMenuInflater().inflate(R.menu.empty_menu, menu); break; } return super.onPrepareOptionsMenu(menu); } @Override public boolean onCreateOptionsMenu(Menu menu) { getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu); MenuItem searchItem = menu.findItem(R.id.search); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setSubmitButtonEnabled(true); searchView.setOnQueryTextListener(queryTextListener); return true; } @Override public boolean onQueryTextSubmit(String query) { Log.i(TAG, "onQueryTextSubmit--"); onSearchClicked(query); // hide keyboard InputMethodManager inputManager = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); return false; } @Override public boolean onQueryTextChange(String newText) { Log.d(TAG, "onQueryTextChange--"); _searchCurrentQuery = newText.toString(); EtablissementApplication._adapter.getFilter().filter(_searchCurrentQuery); return true; } private void onSearchClicked(String query) { Log.d(TAG, "onSearchClicked--"); _searchCurrentQuery = query.toString(); EtablissementApplication._adapter.getFilter().filter(_searchCurrentQuery); } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case android.R.id.home: getSupportActionBar().setDisplayHomeAsUpEnabled(false); break; case R.id.search: break; case R.id.menu_filtre: _dialogFiltre = DialogFiltre.newInstance(R.string.menu_filtre, this); _dialogFiltre.setValidDialogListener(this); _dialogFiltre.show(getSupportFragmentManager(), null); break; } return super.onOptionsItemSelected(item); } 

Вы пытаетесь использовать новый SearchView вместо того, чтобы использовать тот, который создан SupportMenuInflater. Вы устанавливаете слушателя на другой SearchView, который вы видите на экране. Кроме того, каждый раз, когда вызывается onPrepareOptionsMenu, создается новый SearchView и, следовательно, он не имеет набора слушателей.

Попробуйте сделать onPrepareOptionsMenu следующим образом:

 @Override public boolean onPrepareOptionsMenu(Menu menu) { menu.clear(); switch ((int) _viewPager.getCurrentItem()) { case 0: getSupportMenuInflater().inflate(R.menu.empty_menu, menu); break; case 1: getSupportMenuInflater().inflate(R.menu.action_bar_menu, menu); MenuItem searchItem = menu.findItem(R.id.search); SearchView searchView = (SearchView) searchItem.getActionView(); searchView.setSubmitButtonEnabled(true); searchView.setOnQueryTextListener(queryTextListener); break; case 2: getSupportMenuInflater().inflate(R.menu.empty_menu, menu); break; } return super.onPrepareOptionsMenu(menu); } 

И удалите переопределенный метод

 @Override public boolean onCreateOptionsMenu(Menu menu) { }