【问题标题】:ShareActionProvider is nullShareActionProvider 为空
【发布时间】:2015-12-20 03:23:16
【问题描述】:

我一直在寻找 3 或 4 天的解决方案。我努力了: Null Pointer exception in using support library share action provider 或者 why MenuItemCompat.getActionProvider returns null? 和其他一些 但我仍然在 ShareActionProvider 上得到空值。我对开发 android 应用程序很陌生,所以我真的需要一些帮助。

我的 xml 菜单文件是:

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item
    android:id="@+id/action_share"
    android:title="@string/action_share"
    app:showAsAction="always"
    android:icon="@android:drawable/ic_menu_share"
    android:actionProviderClass="android.support.v7.widget.ShareActionProvider"/></menu>

我的片段是:

public static class DailyActivityFragment extends Fragment {
    private static final String LOG_TAG = "Dailyshare";
    private ShareActionProvider mShareActionProvider;

    public DailyActivityFragment() {
        setHasOptionsMenu(true);
    }

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

    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){
        inflater.inflate(R.menu.detailfragment, menu);
        MenuItem item = menu.findItem(R.id.action_share);
        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);
        if (mShareActionProvider != null) {
            mShareActionProvider.setShareIntent(createShareIntent());
        }else{
            Log.i(LOG_TAG, "is null");
        }
    }

    private Intent createShareIntent() {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT,
                "this text will be shared");
        return shareIntent;
    }
}

作为一个进口我有:

import android.support.v7.widget.ShareActionProvider;

【问题讨论】:

    标签: android nullpointerexception shareactionprovider


    【解决方案1】:

    您可以创建一个 ShareActionProvider 并分配它。

    mShareActionProvider = new ShareActionProvider();
    mShareActionProvider.setShareIntent(createShareIntent())
    MenuItemCompat.setActionProvider(item, mShareActionProvider);
    

    【讨论】:

    • 也为我工作。谢谢。
    • 也为我工作,只是注意不要在菜单 XML 文件中指定操作提供程序类!由于最新的支持库更新不再支持此解决方法!
    【解决方案2】:

    您在 XML 中使用了错误的命名空间:

    android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">

      android:actionProviderClass="android.support.v7.widget.ShareActionProvider"

    应该是app:actionProviderClass(提供者类来自apk资源,不是原生android类)。

    https://stackoverflow.com/a/32602896/907576

    【讨论】:

    • 希望这对其他人也有帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-18
    • 1970-01-01
    • 1970-01-01
    • 2013-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多