【问题标题】:Can't set OnActionExpandListener: This is not supported, use MenuItemCompat.setOnActionExpandListener()无法设置 OnActionExpandListener:不支持,使用 MenuItemCompat.setOnActionExpandListener()
【发布时间】:2017-07-26 19:28:26
【问题描述】:

这听起来像是一个重复的问题,但事实并非如此。

我正在尝试将OnActionExpandListener 设置为我的搜索菜单项:

public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu_country_picker, menu);
    MenuItem menuItem = menu.findItem(R.id.search);
    menuItem.setOnActionExpandListener(this);
    //more code
    return true;
}

当我运行它时,我得到了这个异常:

java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.setOnActionExpandListener()
                                                                            at android.support.v7.view.menu.MenuItemImpl.setOnActionExpandListener(MenuItemImpl.java:743)
                                                                            at com.myapp.pages.country_picker.CountryPickerActivity.onCreateOptionsMenu(CountryPickerActivity.java:59)
                                                                            at android.app.Activity.onCreatePanelMenu(Activity.java:3145)
                                                                            at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:320)
                                                                            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:751)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:154)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6121)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

酷,那我们就用MenuItemCompat.setOnActionExpandListener()吧!

以下是我将 menuItem.setOnActionExpandListener(this); 替换为 MenuItemCompat.setOnActionExpandListener(menuItem, this); 时得到的结果:

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:363)
                                                                            at com.myapp.pages.country_picker.CountryPickerActivity.onCreateOptionsMenu(CountryPickerActivity.java:57)
                                                                            at android.app.Activity.onCreatePanelMenu(Activity.java:3145)
                                                                            at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:320)
                                                                            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:751)
                                                                            at android.os.Handler.dispatchMessage(Handler.java:95)
                                                                            at android.os.Looper.loop(Looper.java:154)
                                                                            at android.app.ActivityThread.main(ActivityThread.java:6121)
                                                                            at java.lang.reflect.Method.invoke(Native Method)
                                                                            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:889)
                                                                            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:779)

TLDR:

尝试使用 A:不支持,使用 B。

尝试使用 B:不支持,使用 B。

我的一些可能相关的 build.gradle 配置:

compileSdkVersion 23
buildToolsVersion '25.0.2'

defaultConfig {
    minSdkVersion 21
    targetSdkVersion 23
}

dependencies {
    compile 'com.android.support:support-v4:23.4.0'
    androidTestCompile 'com.android.support:support-annotations:26.0.0-alpha1'
    ...
}

PS:MenuItemCompat.setOnActionExpandListener() 已弃用,文档建议使用 MenuItem.setOnActionExpandListener(MenuItem.OnActionExpandListener,这是我首先尝试的,但正如您所见,它不起作用。

有什么想法吗?

【问题讨论】:

  • 您解决了这个问题吗?我也遇到了同样的问题。
  • 解决了吗?有同样的问题

标签: android android-support-library android-menu android-search


【解决方案1】:

com.android.support:support-annotations:26.0.0-alpha1 已离开 alpha 版本。尝试更新到 com.android.support:support-annotations:26.0.0

https://developer.android.com/topic/libraries/support-library/packages.html#annotations

【讨论】:

    猜你喜欢
    • 2016-02-15
    • 1970-01-01
    • 2018-08-05
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-19
    • 2017-09-14
    • 1970-01-01
    相关资源
    最近更新 更多