4

ShareActionProvider に問題があります。ShareActionProvider を介して、webview の現在の URL (URL は JS を介して動的に変更できます) を共有したいと考えています。これを行うために、onOptionsItemSelected を上書きして、setShareIntent を介してインテントを変更しました。しかし、ShareActionProvider をクリックして特定のアプリケーションを介して共有しても、何も起こりません。デバッグしたところ、onOptionsItemSelected がトリガーされていないことがわかりました。誰か助けてくれませんか?

public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.game, menu);

    MenuItem mShareActionProviderItem = (MenuItem) menu.findItem(R.id.action_share);
    mShareActionProvider = (ShareActionProvider) mShareActionProviderItem.getActionProvider(); // is a field
    Intent sendIntent = new Intent(Intent.ACTION_SEND);
    sendIntent.setType("text/plain");
    mShareActionProvider.setShareIntent(sendIntent); //needed to be able to click on Item

    mShareActionProviderItem.getActionView().setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            String url = ((GameFragment) getFragmentManager().findFragmentByTag(GAME_FRAGMENT)).getUrl();

            /*ShareButton set URL*/
            Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.setType("text/plain");
            sendIntent.putExtra(Intent.EXTRA_TEXT, String.format(getResources().getString(R.string.share_text), url));
            mShareActionProvider.setShareIntent(sendIntent);
        }
    });
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch(item.getItemId()) {
        case R.id.action_share:
            /*URL holen*/
            String url = ((GameFragment) getFragmentManager().findFragmentByTag(GAME_FRAGMENT)).getUrl();

            /*ShareButton mit URL bestücken*/
            ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider();
            Intent sendIntent = new Intent(Intent.ACTION_SEND);
            sendIntent.setType("text/plain");
            sendIntent.putExtra(Intent.EXTRA_TEXT, String.format(getResources().getString(R.string.share_text), url));
            mShareActionProvider.setShareIntent(sendIntent);
            break;
        default:
            return super.onOptionsItemSelected(item);
    }
    return true;
4

1 に答える 1