java - Android V7 ShareActionProvider 分享按钮不工作

标签 java android

我在使用 ShareActionProvider 时遇到了一个奇怪的问题。 每件事都正确链接。分享按钮在那里,但它不起作用。我确实在 logcat 上看到了一个事件,但在电话上没有任何反应。

菜单.xml

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

fragment 菜单初始化代码

import android.support.v4.app.Fragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.widget.ShareActionProvider;

public DetailsFragment() {
    setHasOptionsMenu(true);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    // Inflate the menu; this adds items to the action bar if it is present.
    inflater.inflate(R.menu.detailsfragment_menu, menu);
    MenuItem menuItem = menu.findItem(R.id.action_share);
    mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);
    // If onLoadFinished happens before this, we can go ahead and set the share intent now.
    if (YOUTUBE_KEY != null) {
        mShareActionProvider.setShareIntent(createShareForecastIntent());
    }
}

//分享 Intent 代码

 private Intent createShareForecastIntent() {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
        shareIntent.setType("text/plain");
        Uri videoLocation = Uri.parse(YOUTUBE_API).buildUpon()
                .appendQueryParameter("v", YOUTUBE_KEY)
                .build();
        shareIntent.putExtra(Intent.EXTRA_TEXT, MOVIES_SHARE_HASHTAG);
        shareIntent.setData(videoLocation);

        return shareIntent;
    }

最佳答案

使用 ShareActionProvider 它需要在初始化后立即设置内容,所以在你的 onCreateOptionMenu 中使用虚拟内容进行共享,并在初始化后将 ShareProvider 的引用获取到全局 ShareActionProvider 对象中,即 globalShareActionProvider

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.detailfragment, menu);
    MenuItem menuItem = menu.findItem(R.id.action_share);

    // Get the provider and hold onto it to set/change the share intent
    ShareActionProvider mShareActionProvider =
            (ShareActionProvider) MenuItemCompat.getActionProvider(menuItem);

    // Attach an intent ot this ShareActionProvider.
           if (mShareActionProvider != null) {
        mShareActionProvider.setShareIntent(createShareForecastIntent());
        globalShareActionProvider=mShareActionProvider;
    } else {
        Log.d(LOG_TAG, "Share Action Provider is null?");
    }
}

在此之后,调用 setShareIntent 以创建具有更新值的新 Intent

就像我在我的 onLoaderFinish 函数中使用它一样

        shareActionString= String.format("%s - %s - %s/%s",
                mdateView.getText(), mNewShareContent, hour, minutes);
      globalShareActionProvider.setShareIntent(createShareForecastIntent());

我的 createShareForecastIntent()

private Intent createShareForecastIntent() {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, shareActionString
            + SHARE_HASHTAG);
    return shareIntent;
}

关于java - Android V7 ShareActionProvider 分享按钮不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32526777/

相关文章:

java - 如何检查数据是否已成功插入 Firebase 数组中

java - 使用 .equals() 方法将字符串与字符串数组进行比较

java - Jacorb 挂起以响应远程 API 调用

java - 使用 MSI 从本地运行的 java 应用程序连接到 Azure Keyvault 的方法

java - 哪些版本的 Android SDK 支持在哪些版本的 Java 中编码?

java - 'delete' 中函数 'SQLiteDataBase' 的文档中的错误

java - 指标(变量、参数)及其值的 OOP 模式

java - 归并排序 Java

android - 更改文本上的阴影大小

android - 如何从listView上的选定项目中提取文本