2013-05-31 2 views
3

Я пытаюсь использовать версию SearchView Support v4 с помощью sherlock.Android abs с SearchView, onQueryTextListener не работает

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

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

Вот полный activity.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); 
    } 

ответ

10

Вы пытаетесь использовать новый 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) { } 
+0

ваше предложение хорошее, я пытался, но я до сих пор не получите мой журнал. Есть ли что-нибудь, что мне нужно установить в манифесте или где-нибудь еще, что может заблокировать слушателей? –

+0

Из предоставленного фрагмента я не вижу никаких других ошибок. Опубликуйте полный код операции с импортом и, возможно, мы что-нибудь увидим. –

+0

Я скопировал всю деятельность, когда проблема решена, я удалю это из должности ... –

Смежные вопросы