Android:API级别<14的menuItem.expandActionView()

dan*_*c05 3 search android backwards-compatibility menuitem

我正在使用搜索小部件在我的应用程序上实现搜索界面.我打算支持任何API等级<11(Honeycomb).在搜索活动中,我想覆盖onKeyDown()以在用户按下搜索键时展开搜索小部件,并在提交查询文本时将其最小化.

这很容易通过调用:

@Override
public boolean onSearchRequested() {
    if (mSearchMenuItem != null) {
        mSearchMenuItem.expandActionView();
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

并在提交查询时:

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;
    });
Run Code Online (Sandbox Code Playgroud)

问题是崩溃和扩展都是在API级别14中引入的.如前所述,我希望尽可能提供API级别11的支持,而且我无法在不调用新的API方法的情况下实现相同的功能.

我试过了:

@Override
public boolean onSearchRequested() {
    searchView.setIconifiedByDefault(false);
    //and also called
    searchView.requestFocusFromTouch();
}
Run Code Online (Sandbox Code Playgroud)

但这根本就没有做任何事情(我所说的任何事情,如果已经存在,则searchwidget仍然会崩溃.

由于我保留了对menuItem的引用,我也尝试过:

@Override
public boolean onSearchRequested() {
    SearchActivity.this.onOptionsItemSelected(mSearchMenuItem);
}
Run Code Online (Sandbox Code Playgroud)

但这根本没有做任何事情,我尝试的最后一件事是:

@Override
public boolean onSearchRequested() {
    searchMenu.getActionView().performClick();
    return false;
}
Run Code Online (Sandbox Code Playgroud)

但这也是不行的.

什么我可以做些什么来提供相同的功能的任何想法menuItem.collapseActionView()menuItem.expandActionView(),而不必牺牲兼容性?

小智 19

这适用于API级别10,用于扩展ActionView,例如SearchView

MenuItemCompat.expandActionView(mSearchMenuItem);
Run Code Online (Sandbox Code Playgroud)