2015-05-05 4 views
1

Я пытаюсь добавить недавние запросы к SearchView на панели инструментов:Android SearchView - пустой запрос не работает

mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
    @Override 
    public boolean onQueryTextSubmit(String s) { 
     return false; 
    } 

    @Override 
    public boolean onQueryTextChange(String s) { 
     if (s!= null) 
     { 
      if (s.isEmpty()){ 
       loadRecentList(); 
      } 
      else{ 
       search(s); 
      } 
     } 
     return true; 
    } 

}); 

Поиск работает отлично, но я не могу увидеть последние результаты списка ,

Я нашел Android SearchView.OnQueryTextListener OnQueryTextSubmit not fired on empty query string

но изменения в библиотеку ActionBar не хорошее решение.

Есть ли у кого-нибудь другое решение? Спасибо.

Edit:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu_main_activity, menu); 
    searchItem = menu.findItem(R.id.btn_earch); 
    initSearchView(); 
    setSearchViewListener(); 
    return super.onCreateOptionsMenu(menu); 
} 



protected void initSearchView() { 
    final String CURSOR_RESOURCE_ID = "mCursorDrawableRes"; 
    final int THRESHOLD = 1; 

    mSearchView = (SearchView) searchItem.getActionView(); 

    SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName())); 
    mSearchView.setMeasureWithLargestChildEnabled(true); 

    autoCompleteTextView = (AutoCompleteTextView) mSearchView.findViewById(R.id.search_src_text); 
    autoCompleteTextView.setThreshold(THRESHOLD); 


} 

protected void setSearchViewListener() { 



    mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String s) { 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String s) { 
      if (s!= null) 
      { 
       if (s.isEmpty()){ 
        loadRecentList(); 
       } 
       else{ 
        search(s); 
       } 
      } 
      return true; 
     } 

    }); 

btn_search пункт:

<item 
    android:id="@+id/btn_search" 
    android:icon="@drawable/ic_search_small" 
    android:title="@string/tooltip_search" 
    app:actionViewClass="android.support.v7.widget.SearchView" 
    app:showAsAction="always" 
    /> 
+0

Привет, вы можете показать свой метод onCreateOptionsMenu, пожалуйста? –

+0

@danny Я редактировал вопрос. –

ответ

0

@Gali,

Пожалуйста, обратите внимание на мой код:

1) Я создал ActionBar активность так :

public class CarsActivity extends ActionBarActivity implements ExpandableListView.OnGroupClickListener 
{ 
//my class fields: 
private MenuItem _menu_item; 
private SearchView _searchView; 

// ....... 

//here is my OnCreateOptionMenu method: 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.menu_cars_activity, menu); 
    _menu_item = menu.findItem(R.id.action_search); 
    _searchView = (SearchView) MenuItemCompat.getActionView(_menu_item); 
    _searchView.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() { 
     @Override 
     public void onViewAttachedToWindow(View v) 
     { 
      //action when search is displayed on actinbar 
     } 

     @Override 
     public void onViewDetachedFromWindow(View v) 
     { 
      //action when search is collaped on actinbar 
     } 
    }); 

    _searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String s) 
     { 

      return true; 
     } 
     @Override 
     public boolean onQueryTextChange(String s) 
     { 
     //listener for entering text in searchView 
     //you can implement it your way 
     return false; 
     } 
    }); 
    return true; 
    } 
} 

Надеюсь, это поможет вам.

+0

Не работает. Пока запрос пуст, я все еще не вижу список предложений (мой последний список). –

+0

Попробуйте добавить if (s.length() <0) и загрузить список в нем, пожалуйста. –

0

ЗапросTextListener не запускает пустую строку. Решение состоит в том, чтобы найти подчеркивание EditText в SearchView и прикрепить к нему TextWatcher.

Рекурсивный способ найти вид EditText

private EditText getEditText(final Context context, final View v) { 
    try { 
     if (v instanceof ViewGroup) { 
      ViewGroup vg = (ViewGroup) v; 
      for (int i = 0; i < vg.getChildCount(); i++) { 
       View child = vg.getChildAt(i); 
       View editText = getEditText(context, child); 

       if (editText instanceof EditText) { 
        return (EditText) editText; 
       } 
      } 
     } else if (v instanceof EditText) { 
      Log.d(LogUtil.RANDOM_TAG, "found edit text"); 
      return (EditText) v; 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return null; 
    } 
    return null; 
} 

тогда, когда у вас есть SearchView

EditText et = getEditText(getActivity(), searchView); 

    if (et != null) { 

     et.addTextChangedListener(new TextWatcher() { 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 

      } 

      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 


       if(TextUtils.isEmpty(s)){ 
        Log.d(LogUtil.RANDOM_TAG, "empty"); 
        //do stuff 
       } 
       else{ 
        Log.d(LogUtil.RANDOM_TAG, "not empty"); 
       } 

      } 
     }); 
    } 
2

я решить ее с чем-то вроде этого

searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() { 
     @Override 
     public boolean onQueryTextSubmit(String query) { 
      Log.i("MyApp", searchView.getQuery().toString()); 
      consultarListaParadas(searchView.getQuery().toString()); 
      getActivity().runOnUiThread(new Runnable() { 
       public void run() { 
        adaptadorListaParadasBus.setListaParadas(listaParadas); 
        adaptadorListaParadasBus.notifyDataSetChanged(); 
       } 
      }); 

      return true; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 

      if(newText.equals("")){ 
       this.onQueryTextSubmit(""); 
      } 
      return true; 
     } 
    }); 

Единственная проблема заключается что он выбрасывает без нажатия кнопки поиска.

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