ICS上的支持库v21不支持ActionMode?

3

我正在开发一个应用程序,其中使用了ActionMode

项目依赖:

dependencies {
    compile 'com.android.support:appcompat-v7:21.0.+'
    compile 'com.android.support:cardview-v7:21.0.+'
    compile 'com.android.support:support-v13:21.0+'
}

API 级别:

minSdkVersion 14
targetSdkVersion 21

我的碎片使用 ActionMode:

@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    mode.getMenuInflater().inflate(R.menu.packing_list_context, menu);
    return true;
}
...

菜单:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item
        android:id="@+id/context_menu_item_edit"
        android:icon="@drawable/ic_edit_black_24dp"
        app:showAsAction="always"
        android:title="@string/context_menu_item_edit" />

    <item
        android:id="@+id/context_menu_item_delete"
        android:icon="@drawable/ic_delete_black_24dp"
        app:showAsAction="always"
        android:title="@string/context_menu_item_delete" />

    <item
        android:id="@+id/context_menu_item_tags"
        android:icon="@drawable/ic_label_black_24dp"
        app:showAsAction="always"
        android:title="@string/context_menu_item_tags" />
</menu>

当我在Android 4.4上运行这个应用程序时,一切正常。但是当我在Android 4.0.3上运行它时,在Support Library的某个地方收到以下异常:

堆栈跟踪:

W/System.err( 7292): java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()
W/System.err( 7292): at android.support.v7.internal.view.menu.MenuItemImpl.getActionProvider(MenuItemImpl.java:634)
W/System.err( 7292): at android.support.v7.internal.view.menu.MenuItemWrapperICS.getSupportActionProvider(MenuItemWrapperICS.java:322)
W/System.err( 7292): at android.support.v7.internal.view.menu.MenuItemWrapperICS.checkActionProviderOverrideVisibility(MenuItemWrapperICS.java:348)
W/System.err( 7292): at android.support.v7.internal.view.menu.MenuItemWrapperICS.setVisible(MenuItemWrapperICS.java:183)
W/System.err( 7292): at android.support.v7.internal.view.SupportMenuInflater$MenuState.setItem(SupportMenuInflater.java:425)
W/System.err( 7292): at android.support.v7.internal.view.SupportMenuInflater$MenuState.addItem(SupportMenuInflater.java:479)
W/System.err( 7292): at android.support.v7.internal.view.SupportMenuInflater.parseMenu(SupportMenuInflater.java:196)
W/System.err( 7292): at android.support.v7.internal.view.SupportMenuInflater.inflate(SupportMenuInflater.java:118)
W/System.err( 7292): at net.cornplay.tourist.fragments.PackingListFragment.onCreateActionMode(PackingListFragment.java:392)
W/System.err( 7292): at android.widget.AbsListView$MultiChoiceModeWrapper.onCreateActionMode(AbsListView.java:5635)
W/System.err( 7292): at android.support.v7.internal.view.SupportActionModeWrapper$CallbackWrapper.onCreateActionMode(SupportActionModeWrapper.java:151)
W/System.err( 7292): at android.support.v7.app.ActionBarActivityDelegateBase$ActionModeCallbackWrapper.onCreateActionMode(ActionBarActivityDelegateBase.java:1367)
W/System.err( 7292): at android.support.v7.internal.app.WindowDecorActionBar$ActionModeImpl.dispatchOnCreate(WindowDecorActionBar.java:1012)
W/System.err( 7292): at android.support.v7.internal.app.WindowDecorActionBar.startActionMode(WindowDecorActionBar.java:510)
W/System.err( 7292): at android.support.v7.app.ActionBarActivityDelegateBase.startSupportActionMode(ActionBarActivityDelegateBase.java:576)
W/System.err( 7292): at android.support.v7.app.ActionBarActivityDelegateHC.startActionModeForChild(ActionBarActivityDelegateHC.java:62)
W/System.err( 7292): at android.support.v7.internal.widget.NativeActionModeAwareLayout.startActionModeForChild(NativeActionModeAwareLayout.java:44)
W/System.err( 7292): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:571)
W/System.err( 7292): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:571)
W/System.err( 7292): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:571)
W/System.err( 7292): at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:571)
W/System.err( 7292): at android.view.View.startActionMode(View.java:3607)
W/System.err( 7292): at android.widget.AbsListView.setItemChecked(AbsListView.java:952)
W/System.err( 7292): at net.cornplay.tourist.fragments.PackingListFragment.onItemLongClick(PackingListFragment.java:350)
W/System.err( 7292): at net.cornplay.tourist.adapters.PackingListAdapter$2.onLongClick(PackingListAdapter.java:87)
W/System.err( 7292): at android.view.View.performLongClick(View.java:3547)
W/System.err( 7292): at android.view.View$CheckForLongPress.run(View.java:14088)
W/System.err( 7292): at android.os.Handler.handleCallback(Handler.java:605)
W/System.err( 7292): at android.os.Handler.dispatchMessage(Handler.java:92)
W/System.err( 7292): at android.os.Looper.loop(Looper.java:137)
W/System.err( 7292): at android.app.ActivityThread.main(ActivityThread.java:4424)
W/System.err( 7292): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 7292): at java.lang.reflect.Method.invoke(Method.java:511)
W/System.err( 7292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
W/System.err( 7292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
W/System.err( 7292): at dalvik.system.NativeStart.main(Native Method)

Google提到了这些问题:https://code.google.com/p/android/issues/detail?id=77724, https://code.google.com/p/android/issues/detail?id=78212。但是它们与我的代码有什么关联呢?我没有使用ShareActionProvider。有任何想法吗?

我在Android L Preview跟踪器上找到了类似的问题:https://code.google.com/p/android-developer-preview/issues/detail?id=1660。 - Dima Kornilov
嘿,我收到了一个非常相似的应用程序崩溃报告。你解决了这个问题吗?你能否在你的4.0.x设备上尝试一下,以验证它是否是同样的问题?这是我的应用程序:https://play.google.com/store/apps/details?id=com.lb.app_manager。为了激活操作模式,可以长按项目或单击图标。问题是,我不使用getActionProvider甚至ShareActionProvider。我只是使用“startSupportActionMode”... - android developer
1
@androiddeveloper 我在4.0.3上测试了你的应用程序,它没有崩溃。 - Dima Kornilov
感谢您查看。 - android developer
1个回答

1

实际上,这是AppCompat库中的一个错误。在v21.0.2中已经修复。只需升级,应用程序就不会再崩溃了。


1
嗨,我该在哪里找到新的 Appcompat 版本?我已经更新了 Android SDK 并使用了新版本,但是我无法解决那个错误。 - Amit Prajapati

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接