即使我正在使用MenuItemCompat.setOnActionExpandListener我的应用程序崩溃,建议使用MenuItemCompat.setOnActionExpandListener

时间:2017-03-22 20:00:02

标签: android android-support-library

今天Android Studio(设置为Stable频道更新)让我下载Android支持存储库46.0.0的更新,所以我做到了。然后我们的应用程序突然因为 MenuItemCompat.setOnActionExpandListener 而开始崩溃。

是的我还应该有支票发行说明,但我没有 - 这是事实。

现在我们的问题是什么 - 即使我们使用推荐的表示法MenuItemCompat.setOnActionExpandListener,我们的应用程序崩溃了,我们建议使用MenuItemCompat.setOnActionExpandListener。那是胡说八道。

是否有人遇到同样的问题,或者仅仅是我们的代码问题?有人可以提供如何解决此问题或如何强制使用早期版本的支持库的建议吗?比方说25.1.0。问题似乎在26.0.0-alpha1中,很可能包含在Support Repository版本46中(请参阅该存储库的发行说明 - https://developer.android.com/topic/libraries/support-library/revisions.html#26-0-0-alpha1

顺便说一下。我们的build.gradle已经将支持库的修复版本声明为25.1.0。当使用gradle构建时,似乎新的支持库以某种方式强制在内部使用其他版本。

   compile 'com.android.support:appcompat-v7:25.1.0'
   compile 'com.android.support:design:25.1.0'
   compile 'com.android.support:support-v4:25.1.0'

非常感谢。

代码

MenuItemCompat.setOnActionExpandListener(menu.findItem(R.id.action_search), new MenuItemCompat.OnActionExpandListener() {
                @Override
                public boolean onMenuItemActionExpand(MenuItem menuItem) {
                    ...
                }

StackTrace的一部分

    E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.dev, PID: 4835
java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.setOnActionExpandListener()
at android.support.v7.view.menu.MenuItemImpl.setOnActionExpandListener(MenuItemImpl.java:745)
at android.support.v4.view.MenuItemCompat.setOnActionExpandListener(MenuItemCompat.java:363)
at com.example.fragments.DevicesFragment.onCreateOptionsMenu(DevicesFragment.java:455)
at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:2338)
at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:3070)
at android.support.v4.app.FragmentController.dispatchCreateOptionsMenu(FragmentController.java:328)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:321)
at android.support.v7.view.WindowCallbackWrapper.onCreatePanelMenu(WindowCallbackWrapper.java:95)
at android.support.v7.app.AppCompatDelegateImplBase$AppCompatWindowCallbackBase.onCreatePanelMenu(AppCompatDelegateImplBase.java:333)
at android.support.v7.app.AppCompatDelegateImplV9.preparePanel(AppCompatDelegateImplV9.java:1372)
at android.support.v7.app.AppCompatDelegateImplV9.doInvalidatePanelMenu(AppCompatDelegateImplV9.java:1652)
at android.support.v7.app.AppCompatDelegateImplV9$1.run(AppCompatDelegateImplV9.java:134)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)

更新: 这似乎与这个问题有关,因为我也尝试过,同样的事情发生在我身上。我还是不想更新到API 26 - Android Support Repo 46.0.0 with Android Studio 2.3

2 个答案:

答案 0 :(得分:3)

这只是26.0.0-alpha1版本中的一个错误。通过更新build.gradle文件切换回25.3.0。

答案 1 :(得分:-1)

更新23.3.2017: 基于评论和进一步研究,当Gradle依赖性解析使您使用任何其他版本时,正确的方法是强制gradle使用显式版本。

感谢@Eugen和@ianhanniballake,您可以使用以下步骤来决定是否需要执行任何操作并强制显式版本。

  1. 运行gradlew androidDependencies以检查Gradle
  2. 解析和使用的版本
  3. 如果它与您要求的显式版本不符,请按照@Eugen对此主题的说明强制执行 - https://stackoverflow.com/a/42957234/816216(下面发布的代码段)
  4. _

    configurations.all {
        resolutionStrategy.eachDependency { DependencyResolveDetails details ->
            def requested = details.requested
            if (requested.group == 'com.android.support') {
                if (!requested.name.startsWith("multidex")) {
                    details.useVersion '25.3.0'
                }
            }
        }
    }