Androidのアクションバーの共有ボタン、 ShareActionProviderまわりなのですが、
とにかく公式のドキュメントも、v4以前、v4の頃、v7の頃のいろんな時代のAPI
のサンプルが混ざっていて魔境すぎる感じになっています...。
いろいろ調べてみて2016年10月時点 Android Studio v2.2.2 現在で信用できる
ドキュメントは以下2点でした。
これ以外のドキュメントは、ウソだったり古かったりと地獄。とにかくひどい。ひどすぎる!
最終的に以上のドキュメントに忠実に実装すると、
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:shareingsimpledata="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_share"
android:title="@string/share"
shareingsimpledata:showAsAction="ifRoom"
shareingsimpledata:actionProviderClass="android.support.v7.widget.ShareActionProvider"/>
</menu>
package com.example.sharingsimpledata;
import android.content.Intent;
import android.support.v4.view.MenuItemCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.ShareActionProvider;
import android.view.Menu;
import android.view.MenuItem;
// ...
public class MainActivity extends AppCompatActivity {
// ...
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.share_menu, menu);
MenuItem shareItem = menu.findItem(R.id.action_share);
ShareActionProvider myShareActionProvider = (ShareActionProvider)MenuItemCompat.getActionProvider(shareItem);
Intent shareIntent = new Intent(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, "Shared Massage Sample");
shareIntent.setType("text/plain");
myShareActionProvider.setShareIntent(shareIntent);
return super.onCreateOptionsMenu(menu);
}
// ...
}
以上2つを追記するだけでOKです。これで共有ボタンのメニューが出てきて、共有の履歴も自動でボタンとして追加されます。
StackOverflowで検索すると出てくる onOptionsItemSelected
をオーバーライドするとか、
ShareActionProvider.setOnShareTargetSelectedListener()
を使って、 OnShareTargetSelectedListener
を実装したインスタンスを設定するとかは全部昔のやり方です。 doShare
メソッドなどを実装しなきゃいけないなんてこともないです。
教訓としては、基本的に JavaDoc のクラスコメントだけが一番信用でき、他のものは古くて使えない可能性がある、ということに尽きます。今後も公式ドキュメント、特に JavaDoc を正として追いかけて行きたいところです。良い教訓になりました。