java - android searchview setOnActionExpandListener on Honeycomb 3.2

标签 java android android-actionbar android-3.0-honeycomb searchview

我正在使用 android-support-v4 开发适用于 Android 3.2 及更高版本的应用。当操作栏中的 SearchView 展开和折叠时,我需要实现 OnActionExpandListener 以“拦截”。我的 Android 4.0 及更高版本的代码没问题,但 3.2 不行。

menu.xml

<item android:id="@+id/menu_search"
    android:title="@string/menu_search"
    android:icon="@android:drawable/ic_menu_search"
    android:showAsAction="collapseActionView|always"
    android:actionViewClass="android.widget.SearchView" />

MyActivity.java

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

    final MenuItem searchMI = menu.findItem(R.id.menu_search);
    if(searchView == null) {
        //searchView = (SearchView) searchMI.getActionView();
        searchView = (SearchView) MenuItemCompat.getActionView(searchMI);
        searchView.setOnQueryTextListener(this);
        searchView.setOnSuggestionListener(this);
        searchView.setOnCloseListener(new OnCloseListener() {

            @Override
            public boolean onClose() {
                //some code
                return false;
            }
        });
    }


    int currentapiVersion = android.os.Build.VERSION.SDK_INT;
    if (currentapiVersion <= android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
        MenuItemCompat.setShowAsAction(searchMI, MenuItemCompat.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW | MenuItemCompat.SHOW_AS_ACTION_ALWAYS);
        MenuItemCompat.setOnActionExpandListener(searchMI, new OnActionExpandListener() {

            /* (non-Javadoc)
             * @see android.support.v4.view.MenuItemCompat.OnActionExpandListener#onMenuItemActionExpand(android.view.MenuItem)
             */
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                Toast.makeText(getApplicationContext(), "onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
                return true;
            }

            /* (non-Javadoc)
             * @see android.support.v4.view.MenuItemCompat.OnActionExpandListener#onMenuItemActionCollapse(android.view.MenuItem)
             */
            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                Toast.makeText(getApplicationContext(), "onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
    } else {
        searchMI.setOnActionExpandListener(new MenuItem.OnActionExpandListener() {

            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                Toast.makeText(getApplicationContext(), "MenuItem#onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                Toast.makeText(getApplicationContext(), "MenuItem#onMenuItemActionExpand", Toast.LENGTH_SHORT).show();
                return true;
            }
        });
    }
}

为什么Honeycomb没有调用listener的方法?

非常感谢。

最佳答案

您可能错过了一个事实(就像我一样),即“MenuItemCompat.OnActionExpandListener”接口(interface)具有静态实现,而不是实例方法。

因此,如果您有一个实现了 MenuItemCompat.OnActionExpandListener 的类,那么在该类中您需要像这样将其安装为监听器:

MenuItem menuItem =  menu.findItem(R.id.search);
if (menuItem != null) {
  MenuItemCompat.setOnActionExpandListener(menuItem,this);
  MenuItemCompat.setActionView(menuItem, mSearchView);
}

相同的范例适用于 setActionView ...而不是调用 menuItem.setActionView(this),您将 menuItem 作为第一个参数传递给静态版本 MenuItemCompat.setActionView 并跟随其他参数。

关于java - android searchview setOnActionExpandListener on Honeycomb 3.2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19918500/

相关文章:

android - Actionbar Tab 和 ViewPager 中的 Fragment

java - 修复操作栏中搜索 View 的 getfilter

java - 在使用之间保存 Java GUI 布局配置(带桌面 Pane )

javascript - 什么是 WOPI 操作 URL?

java - 显示日期范围的 I18N 友好方式是什么?

android - Fragment 中的 View 绑定(bind)导致 KotlinNullPointerException 在生命周期范围的协程内运行

java - 将 ä、ö、ü 重命名为 ae、oe、ue

android - 在 Fragment 中添加 onOptionsItemSelected 调用

android:动态设置整个屏幕的背景颜色,或者如何设置actionbar覆盖布局,但不覆盖内容

android - 如何在 WebView 中显示 Android Action Bar