java - 如何解决此 java.lang.UnsupportedOperationException : This is not supported in Android L?

标签 java android android-actionbar toolbar

我尝试使用 MultiChoiceModeListener 单击多个项目来共享项目,但在 onCreateActionMode 方法中遇到了致命异常 我已经使用了AppCompat v21.0.2,在L更新之前,此代码在AppCompat v19

中完美运行
@Override
public boolean onCreateActionMode(ActionMode mode, Menu menu) {
    // TODO Auto-generated method stub
    mActionMode = mode;
    nr = 0;
    MenuInflater inflater = getActivity().getMenuInflater();
    inflater.inflate(R.menu.contextual_menu, menu);

    MenuItem menuItem = menu.findItem(R.id.item_menu_share);
    mShareActionProvider = (ShareActionProvider) menuItem
        .getActionProvider();
    mShareActionProvider
        .setOnShareTargetSelectedListener(PlanetFragment.this);

    return true;
}

异常(exception):

FATAL EXCEPTION: main
java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.setActionProvider()
    at android.support.v7.internal.view.menu.MenuItemImpl.setActionProvider(MenuItemImpl.java:639)
    at android.view.MenuInflater$MenuState.setItem(MenuInflater.java:445)
    at android.view.MenuInflater$MenuState.addSubMenuItem(MenuInflater.java:457)
    at android.view.MenuInflater.parseMenu(MenuInflater.java:186)
    at android.view.MenuInflater.inflate(MenuInflater.java:110)
    at android.support.v7.internal.view.SupportMenuInflater.inflate(SupportMenuInflater.java:109)
    at com.mydata.PlanetFragment$GetDataAsyncTask$1.onCreateActionMode(PlanetFragment.java:252)
    at android.widget.AbsListView$MultiChoiceModeWrapper.onCreateActionMode(AbsListView.java:6203)
    at android.support.v7.internal.view.SupportActionModeWrapper$CallbackWrapper.onCreateActionMode(SupportActionModeWrapper.java:154)
    at android.support.v7.app.ActionBarActivityDelegateBase$ActionModeCallbackWrapper.onCreateActionMode(ActionBarActivityDelegateBase.java:1297)
    at android.support.v7.app.ActionBarActivityDelegateBase.startSupportActionModeFromWindow(ActionBarActivityDelegateBase.java:648)
    at android.support.v7.app.ActionBarActivityDelegate$1.startActionMode(ActionBarActivityDelegate.java:99)
    at android.support.v7.widget.WindowCallbackWrapper.startActionMode(WindowCallbackWrapper.java:69)
    at android.support.v7.internal.app.ToolbarActionBar.startActionMode(ToolbarActionBar.java:206)
    at android.support.v7.app.ActionBarActivityDelegateBase.startSupportActionMode(ActionBarActivityDelegateBase.java:581)
    at android.support.v7.app.ActionBarActivityDelegateHC.startActionModeForChild(ActionBarActivityDelegateHC.java:62)
    at android.support.v7.internal.widget.NativeActionModeAwareLayout.startActionModeForChild(NativeActionModeAwareLayout.java:44)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:677)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:677)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:677)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:677)
    at android.view.ViewGroup.startActionModeForChild(ViewGroup.java:677)
    at android.view.View.startActionMode(View.java:4347)
    at android.widget.AbsListView.performLongPress(AbsListView.java:2874)
    at android.widget.AbsListView$CheckForLongPress.run(AbsListView.java:2834)
    at android.os.Handler.handleCallback(Handler.java:730)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:137)
    at android.app.ActivityThread.main(ActivityThread.java:5162)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:525)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:756)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:572)
    at miui.dexspy.DexspyInstaller.main(DexspyInstaller.java:171)
    at dalvik.system.NativeStart.main(Native Method)

最佳答案

这是一个老问题,但我会发布我的解决方案,也许有人会发现它有用。

@Override
        public boolean onCreateActionMode(ActionMode mode, Menu menu) {
            Log.d(TAG, "onCreateActionMode");

            mode.getMenuInflater().inflate(R.menu.list_select_menu, menu);
            MenuItem item = menu.findItem(R.id.menu_item_share);
            mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
            MenuItemCompat.setActionProvider(item, mShareActionProvider);

            return true;
        }

关于java - 如何解决此 java.lang.UnsupportedOperationException : This is not supported in Android L?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27728905/

相关文章:

java - 禁用选项卡滑动

java - 如何从现有代码生成表单文件?

java - 没有主键或连接表的 Hibernate 多对一关系

java - 在两个jsp文件之间传递值

java - 每当日期从 DatePicker 更改时显示文本

android - 使用 ActionBarsherlock 时更改应用程序标签字体

android - 将对象从 Fragment 传递到 Activity

Android:做很多 Activity 更好,还是做 1 个动态变化的 Activity ?

android - 适用于 Android 的垂直操作栏

android - Holo.Light.DarkActionBar ActionBar 的默认十六进制颜色是什么