2013-02-27 3 views
3

Я реализую интерфейс поиска в своем приложении с помощью виджета поиска. Я делаю не планируют поддерживать любой уровень API < 11 (Honeycomb). В операции поиска я хотел бы переопределить onKeyDown(), чтобы развернуть виджет поиска, когда пользователь нажимает клавишу поиска и сводит к минимуму его при отправке текста запроса.Android: menuItem.expandActionView() на уровне API <14

Это легко осуществляется с помощью вызова:

@Override 
public boolean onSearchRequested() { 
    if (mSearchMenuItem != null) { 
     mSearchMenuItem.expandActionView(); 
    } 
    return false; 
} 

и когда запрос передается:

searchView.setOnQueryTextListener(new OnQueryTextListener() { 

     @Override 
     public boolean onQueryTextSubmit(String query) { 
      //Do nothing, results for the string supplied are already shown. 
      //Just collapse search widget 
      mSearchMenu.collapseActionView(); 
      return false; 
     } 

     @Override 
     public boolean onQueryTextChange(String newText) { 
      //do other stuff 
      return false; 
    }); 

Проблема заключается в том, что оба сворачивания и разворачивания были введены в уровне API 14. Как упоминалось ранее, Я хочу предоставить поддержку еще в 11-м уровне API, и у меня возникают проблемы с достижением такой же функциональности, не вызывая новых методов API.

Я пробовал:

@Override 
public boolean onSearchRequested() { 
    searchView.setIconifiedByDefault(false); 
    //and also called 
    searchView.requestFocusFromTouch(); 
} 

но просто ничего не делать вообще (чем-либо я имею в виду searchwidget остается разрушился, если он уже был

Поскольку я держу ссылку на. MENUITEM, я также пытался:

@Override 
public boolean onSearchRequested() { 
    SearchActivity.this.onOptionsItemSelected(mSearchMenuItem); 
} 

, но это ничего не делать вообще либо, последняя вещь, которую я попытался было:

@Override 
public boolean onSearchRequested() { 
    searchMenu.getActionView().performClick(); 
    return false; 
} 

Но это тоже нехорошо.

Любые идеи относительно того, что я мог сделать, чтобы обеспечить ту же функциональность, что и menuItem.collapseActionView(), и menuItem.expandActionView() без необходимости жертвовать совместимостью?

ответ

0

У вас всегда есть возможность дифференцировать свое решение в зависимости от текущей работающей версии:

int sdk = android.os.Build.VERSION.SDK_INT; 
if(sdk < android.os.Build.VERSION_CODES.HONEYCOMB) { 
// pre honeycomb 
} else { 
// honeycomb and post 
} 

Я знаю, это может быть не совсем то, что вы ищете, но могли бы получить некоторые пути.

1

Статические методы MenuItemCompat можно использовать. Пример:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_search, menu); 

    MenuItem menuItem = menu.findItem(R.id.action_search); 
    MenuItemCompat.expandActionView(menuItem); 
    SearchView searchView = (SearchView) MenuItemCompat.getActionView(menuItem); 
    ... 
} 

Подробнее: http://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html

19

Это работает на уровне API 10 для расширения ActionView например SearchView

MenuItemCompat.expandActionView(mSearchMenuItem); 
+2

Это должен быть принятый ответ. – dtrejogo

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