4

ユーザー ユーザーが WebView で表示しているページを取得し、ACTION_SEND インテントとして URL を FaceBook/etc と共有できるようにしたいと考えています。

私はこれを試しましたが、明らかにURLがonCreateOptionsMenuに存在しません。どうすれば onOptionsItemsSelected に移動できますか?

private ShareActionProvider mShareActionProvider;
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // TODO Auto-generated method stub


    return super.onOptionsItemSelected(item);
}
   @Override
public boolean onCreateOptionsMenu(Menu menu) {
     getMenuInflater().inflate(R.menu.activity_main, menu);
     MenuItem item = menu.findItem(R.id.menu_item_share);
     mShareActionProvider = (ShareActionProvider)item.getActionProvider();
     mShareActionProvider.setShareHistoryFileName(
       ShareActionProvider.DEFAULT_SHARE_HISTORY_FILE_NAME);
     mShareActionProvider.setShareIntent(createShareIntent());
     return true;   
}
 private Intent createShareIntent() {
      Intent shareIntent = new Intent(Intent.ACTION_SEND);
            shareIntent.setType("text/plain");
            shareIntent.putExtra(Intent.EXTRA_TEXT, 
          web.getUrl());
            return shareIntent;
        }
4

1 に答える 1

7

onCreateOptionsMenu上記のコードは、オプション メニューが最初に表示されたときに一度だけ呼び出されるため、機能しません。

これを修正するのは非常に簡単です。onOptionsItemSelectedが呼び出されたときに Intent を構築しています。これは、インフレートされたメニューのリソースが選択されたときです。選択したアイテムが共有リソースの場合、shareURLが実行され、インテントがビルドおよび開始されます。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.activity_main, menu);
    return true;
}

@Override
public final boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.menu_item_share:
            shareURL();
    }
    return super.onOptionsItemSelected(item);
}

private void shareURL() {
    Intent shareIntent = new Intent(Intent.ACTION_SEND);
    shareIntent.setType("text/plain");
    shareIntent.putExtra(Intent.EXTRA_TEXT, web.getUrl());
    startActivity(Intent.createChooser(shareIntent, "Share This!"));
}

上記のコード サンプルはテストしていません。実際のデバイスでも Java コンパイラでもありません。それでも、問題の解決に役立つはずです。

于 2013-02-02T22:33:31.427 に答える