如何在android中实现共享操作?

时间:2015-11-08 11:35:53

标签: android

我想在我的项目中实现共享操作,但是当我使用MenuItem时,它会给运行时错误代替使用MenuItemCompat,但是它太过错误。

这是我的代码:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_third_, menu);
    MenuItem menuItem = menu.findItem(R.id.menu_item_share);


    mShareActionProvider = (ShareActionProvider) menuItem.getActionProvider();

    mShareActionProvider.setShareIntent(getDefaultShareIntent());

    return true;
}

public Intent getDefaultShareIntent (){

   Intent shareIntent = new Intent(Intent.ACTION_SEND);

    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_SUBJECT, "SUBJECT");
    shareIntent.putExtra(Intent.EXTRA_TEXT,"Extra Text");
    return shareIntent;
}

1 个答案:

答案 0 :(得分:2)

我认为您的活动有subclassed AppCompatActivity,因此您会收到此错误,请使用以下代码

在您的活动中初始化ShareActionProvider

import android.support.v7.widget.ShareActionProvider;
import android.support.v4.view.MenuItemCompat;


    private ShareActionProvider mShareActionProvider;

   @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        // Locate MenuItem with ShareActionProvider
        MenuItem item = menu.findItem(R.id.action_share);

        // Fetch and store ShareActionProvider
        mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(item);

        mShareActionProvider.setShareHistoryFileName(ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
        // Set share Intent.
        // Note: You can set the share Intent afterwords if you don't want to set it right now.
        mShareActionProvider.setShareIntent(createShareIntent());
        // Return true to display menu
        return true;
    }

    // Create and return the Share Intent
    private Intent createShareIntent() {
        Intent shareIntent = new Intent(Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(Intent.EXTRA_TEXT, "http://play.google.com/store/apps/details?id=pk.nimgade.Bostan.Train.Schedule");
        Intent intent = Intent.createChooser(shareIntent,"Share");
        return shareIntent;
    }

这就是你的xml视图的样子

 <item
        android:id="@+id/action_share"
        app:actionProviderClass="android.support.v7.widget.ShareActionProvider"
        app:showAsAction="always"
        android:title="Share" />

请确保你的SDK已更新,在这个特殊情况下,我确实遇到了这个问题,当你不知道缺少什么时,这是令人讨厌的