gpt4 book ai didi

android - 异常 : This is not supported, 使用 MenuItemCompat.getActionProvider()

转载 作者:IT王子 更新时间:2023-10-28 23:33:18 28 4
gpt4 key购买 nike

我正在尝试在 Android 应用程序的操作栏中制作“分享”按钮。这是我的代码:

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBarActivity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ShareActionProvider;
import android.widget.TextView;

和 fragment 部分:

{
private String mForecastText;

public PlaceholderFragment() {
setHasOptionsMenu(true);
}

private Intent sharedIntentMaker(){
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
shareIntent.setType("text/plain");
shareIntent.putExtra(Intent.EXTRA_TEXT, mForecastText + "#SunshineApp");
return shareIntent;
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.menu_detail, menu);
MenuItem menuItem = menu.findItem(R.id.menu_action_share);
ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
mShareActionProvider.setShareIntent(sharedIntentMaker());

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_detail, container, false);

TextView textIntent = (TextView) rootView.findViewById(R.id.textIntent);
Intent intent = getActivity().getIntent();
mForecastText = intent.getStringExtra("INT_PS");
textIntent.setText(mForecastText);
return rootView;
}

当我在模拟器甚至真实设备上运行我的应用程序时,我得到了异常:

AndroidRuntime﹕ FATAL EXCEPTION: main java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()

它链接到 onCreateOptionsMenu() 的字符串:

ShareActionProvider mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();
mShareActionProvider.setShareIntent(sharedIntentMaker());

我做错了什么?

P.S.:来自 logcat 的错误堆栈跟踪:

01-11 13:03:17.490 2331-2331/com.*****.*****.***** E/AndroidRuntime﹕ FATAL EXCEPTION: main Process: com.*****.*****.*****, PID: 2331

java.lang.UnsupportedOperationException: This is not supported, use MenuItemCompat.getActionProvider()

at android.support.v7.internal.view.menu.MenuItemImpl.getActionProvider(MenuItemImpl.java:645)
at com.project.malina.sunsine.DetailActivity$PlaceholderFragment.onCreateOptionsMenu(DetailActivity.java:70)
at android.support.v4.app.Fragment.performCreateOptionsMenu(Fragment.java:1868)
at android.support.v4.app.FragmentManagerImpl.dispatchCreateOptionsMenu(FragmentManager.java:1989)
at android.support.v4.app.FragmentActivity.onCreatePanelMenu(FragmentActivity.java:276)
at android.support.v7.app.ActionBarActivity.superOnCreatePanelMenu(ActionBarActivity.java:276)
at android.support.v7.app.ActionBarActivityDelegate$1.onCreatePanelMenu(ActionBarActivityDelegate.java:79)
at android.support.v7.app.ActionBarActivityDelegateBase.preparePanel(ActionBarActivityDelegateBase.java:979)
at android.support.v7.app.ActionBarActivityDelegateBase.doInvalidatePanelMenu(ActionBarActivityDelegateBase.java:1182)
at android.support.v7.app.ActionBarActivityDelegateBase.access$100(ActionBarActivityDelegateBase.java:79)
at android.support.v7.app.ActionBarActivityDelegateBase$1.run(ActionBarActivityDelegateBase.java:115)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5221)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

最佳答案

首先,您不能将 android.widget.ShareActionProviderappcompat-v7 操作栏后端(例如 ActionBarActivity)一起使用。要么使用 appcompat-v7 版本的 ShareActionProvider,要么将所有内容移至原生操作栏。

其次,如果您坚持使用 appcompat-v7,那么您将无法安全地使用 getActionProvider(),因为该方法在 API 级别 10 及以下级别将不存在。将 menuItem.getActionProvider() 替换为 MenuItemCompat.getActionProvider(menuItem)

FWIW,here is a sample project实现了 ShareActionProviderappcompat-v7 版本。

关于android - 异常 : This is not supported, 使用 MenuItemCompat.getActionProvider(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27887716/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com