2013-12-18 4 views
1

У меня есть стандартный поиск EditText в моем ActionBar, вызванный прикосновением к значку маленького увеличительного стекла. Я могу кэшировать строку поиска пользователя с помощью OnQueryTextListener. Я хочу вернуть эту строку в EditText, когда пользователь коснется значка второй раз.Поле поиска Android ActionBar

Я использую ABS (скоро отказаться), ориентируясь на 8-19.

Как это сделать?

ответ

1

С нормальной панелью действия (вам нужно будет найти различные варианты с ABS, не уверен, что мой ответ будет полностью применен к этой библиотеке).

SearchView это виджет, который может быть завышен в меню опций, так что я делаю это надуть меню с помощью XML, содержащего вид действий:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/search_user" 
     android:actionViewClass="android.widget.SearchView" 
     android:icon="@drawable/magnifing_glass" 
     android:showAsAction="ifRoom|collapseActionView" 
     android:title="Search Users"/> 

</menu> 

Далее, при раздувании вида действия, установите прослушиватели и используйте глобальную переменную для сохранения предыдущего поиска.

public boolean onCreateOptionsMenu(Menu menu) { 
     super.onCreateOptionsMenu(menu); 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.search_menu, menu); 


     MenuItem search = menu.findItem(R.id.search_user); 

      //Keep a global variable of this so you can set it within the next listener 
      SearchView user_search = (SearchView) search.getActionView(); 

     user_search.setOnQueryTextListener(new OnQueryTextListener() { 

      @Override 
      public boolean onQueryTextSubmit(String query) { 
       global_variable = query; 
       return true; 
      } 

      @Override 
      public boolean onQueryTextChange(String text) { 
       return true; 
      } 
     }); 

Наконец, во втором слушателе установите текст глобальной переменной в свой предыдущий запрос, когда расширяется представление действия.

//This is set on the menu item 
search.setOnActionExpandListener(new OnActionExpandListener() { 
     @Override 
     public boolean onMenuItemActionCollapse(MenuItem item) { 
      // Do something when collapsed 
      return true;  // Return true to collapse action view 
     } 
     @Override 
     public boolean onMenuItemActionExpand(MenuItem item) { 
      user_search.setQuery(global_variable, false); 
      return true;  // Return true to expand action view 
     } 
    }); 
Смежные вопросы