首页 > 解决方案 > Android 6.0+:java.lang.UnsupportedOperationException:不支持,使用 MenuItemCompat.setOnActionExpandListener()

问题描述

安卓工作室 3.2。

dependencies {
    classpath 'com.android.tools.build:gradle:3.2.1'


android {
    compileSdkVersion 25
    defaultConfig {
        applicationId "com.myproject"
        minSdkVersion 18
        targetSdkVersion 25
        versionCode 423
        versionName "2.1.423"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

def AAVersion = '4.5.2'

依赖项 { annotationProcessor "org.androidannotations:androidannotations:$AAVersion" annotationProcessor "org.androidannotations:ormlite:$AAVersion"

implementation fileTree(dir: 'libs', include: ['*.jar'])

implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.android.support:appcompat-v7:25.0.0'
implementation 'com.android.support:cardview-v7:25.0.0'
implementation 'com.android.support:customtabs:25.0.0'
implementation 'com.android.support:support-media-compat:25.0.0'
implementation 'com.android.support:support-v4:25.0.0'

implementation 'com.crashlytics.sdk.android:crashlytics:2.9.7'
implementation 'com.google.android.gms:play-services-gcm:16.0.0'
implementation 'com.google.code.gson:gson:2.8.2'
implementation 'com.j256.ormlite:ormlite-android:5.1'
implementation 'commons-codec:commons-codec:1.11'
implementation 'commons-io:commons-io:2.6'
implementation 'org.apache.commons:commons-lang3:3.8.1'
implementation 'org.apache.httpcomponents:httpclient:4.3.6'
implementation "org.androidannotations:androidannotations-api:$AAVersion"
implementation "org.androidannotations:ormlite-api:$AAVersion"

testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
androidTestImplementation 'com.android.support.test:runner:1.0.2'

}

   MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {
            @Override
            public boolean onMenuItemActionExpand(MenuItem item) {
                isSearchWidgetExpanded = true;
                mToolbar.setBackgroundColor(ContextCompat.getColor(activity, R.color.search_view_background));
                // Expand (click to magnifying glass) and give focus to
                // SearchView automatically
                searchView.setFocusable(true);
                searchView.setIconified(false);
                searchView.requestFocusFromTouch();
                searchView.setIconifiedByDefault(false);

                menu.setGroupVisible(R.id.main_menu_group, false);
                return true;
            }

            @Override
            public boolean onMenuItemActionCollapse(MenuItem item) {
                if (BuildConfig.DEBUG)
                    Log.d(TAG, "onMenuItemActionCollapse(), press_home_searchView");
                isSearchWidgetExpanded = false;
                mToolbar.setBackgroundColor(activity.getResources().getColor(R.color.factura_background_color));
                searchView.setQuery("", false);
                menu.setGroupVisible(R.id.main_menu_group, true);
                AndroidUtil.hideKeyboard((Activity) activity);
                return true;
            }
        });

在 Android 6.0+ 上启动时出现错误:

Process: com.myproject, PID: 24036
java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.setOnActionExpandListener()
    at android.support.v7.view.menu.MenuItemImpl.setOnActionExpandListener(MenuItemImpl.java:743)
    at android.support.v4.view.MenuItemCompat.setOnActionExpandListener(MenuItemCompat.java:464)
    at com.myproject.widget.SearchViewProviderWidget.<init>(SearchViewProviderWidget.java:147)
    at com.myproject.MainFragmentActivity.onCreateOptionsMenu(MainFragmentActivity.java:703)
    at android.app.Activity.onCreatePanelMenu(Activity.java:2852)
    at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:328)
    at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:92)
    at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:331)
    at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:92)
    at android.support.v7.app.ToolbarActionBar.populateOptionsMenu(ToolbarActionBar.java:454)
    at android.support.v7.app.ToolbarActionBar$1.run(ToolbarActionBar.java:61)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:148)
    at android.app.ActivityThread.main(ActivityThread.java:5417)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
   Force finishing activity com.myproject/.MainFragmentActivity_

错误在这一行:

MenuItemCompat.setOnActionExpandListener(searchMenuItem, new MenuItemCompat.OnActionExpandListener() {

标签: androidandroid-studio-3.0

解决方案


文档说要像这样直接使用该方法:

searchMenuItem.setOnActionExpandListener(new MenuItemCompat.OnActionExpandListener() { /* ... */ })

编辑:

这可能是支持库版本 25 中的一个错误,因此要修复它使用较新的版本,如 26。


推荐阅读