0

我正在学习关于 Udacity 的关于构建 Android 应用程序的课程(在这种情况下是天气)。我在执行分享操作时遇到了问题。在从另一个论坛获得一些建议后,我将最小 SDK 版本从 10 或 11 更改为 17,因为这只是一个学习活动。目前,我在操作栏中显示了“共享”按钮,但点击它什么也没做。我试着把它放在溢出菜单中,但仍然没有。我尝试了一些调试,但我不知道应该在哪里处理按钮单击;调试器通过并创建 shareIntent 对象,但它似乎没有发生任何事情。我查看了这个文档,但是当我尝试处理视图的 onOptionsItemSelected 中的共享时,在调用 createShareIntent 时出现空指针异常。

这是嵌套片段的 onCreateOptionsMenu:

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

    ShareActionProvider mShareActionProvider = new ShareActionProvider(getActivity());
    if(mShareActionProvider != null) {
        mShareActionProvider.setShareIntent(createShareIntent());
    } else {
        Log.d(LOG_TAG, "Share action provider is null");
    }
}

这是包含视图的 onOptionsItemSelected,有问题的代码已注释掉:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        startActivity(new Intent(this, SettingsActivity.class));
        return true;
    } else if (id == R.id.action_share) {
        //DetailFragment details = (DetailFragment) getFragmentManager().findFragmentByTag("detailFragment");
        //startActivity(details.createShareIntent());
    }

    return super.onOptionsItemSelected(item);
}

这是 createShareIntent 方法:

private Intent createShareIntent() {
    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, mForecastStr + FORECAST_SHARE_HASHTAG);
    return shareIntent;
}
4

2 回答 2

0

目前,我在操作栏中显示了“共享”按钮,但点击它什么也没做。

确保您正在通过调用的代码分支setShareIntent(),并确保您正在测试的设备或模拟器具有来自某些支持ACTION_SEND的应用程序的活动text/plain。此外,如果只有一个活动支持ACTION_SENDtext/plain则该活动的图标将显示在ShareActionProvider分享图标旁边,您可以点击活动图标与该活动分享。

我尝试了一些调试,但我不知道应该在哪里处理按钮单击

那是在ShareActionProvider.

我查看了这个文档,但是当我尝试在视图的 onOptionsItemSelected 中处理共享时,在调用 createShareIntent 时出现空指针异常。

onOptionsItemSelected()用于常规操作项,而不是操作提供者。

于 2014-12-29T16:07:09.663 回答
0

事实证明,我放入android:actionProviderClass="android.widget.ShareActionProvider了布局 XML 文件而不是菜单文件。我不认为我正在学习的 Udacity 课程提到了正确的位置(可能是由于兼容性问题)。

于 2015-01-03T14:30:44.593 回答