Android共享动作不做任何事情

时间:2014-12-29 16:01:27

标签: android android-actionbar shareactionprovider

我正在关注Udacity的一个关于构建Android应用程序的课程(在这种情况下是天气)。我在实施Share操作时遇到了麻烦。在从另一个论坛获得一些建议后,我将min SDK版本从10或11更改为17,因为这只是一个学习活动。目前,我有"分享"按钮显示在操作栏中,但点击它不会做任何事情。我尝试将它放在溢出菜单中,但仍然没有。我尝试了一些调试,但我不知道按钮点击应该在哪里处理;调试器通过并创建shareIntent对象,但似乎没有任何事情发生。我查看了this doc,但是当我尝试在视图的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;
}

2 个答案:

答案 0 :(得分:0)

  

目前,我有"分享"按钮显示在操作栏中,但点击它不会做任何事情。

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

  

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

这是ShareActionProvider

的实施内部
  

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

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

答案 1 :(得分:0)

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