ShareCompatとActionProvider
Android4.x系からはShareActionProviderとかあるんすけど、それを使わずにActionProviderを使ってShareCompatで共有の処理を実装する方法
ちなみに元々参考として http://dev.classmethod.jp/smartphone/android/android-tips-35-sharecompat
(ここでは書かないけど<menu>でandroid:actionProviderClassを指定しておく。ちなみに今回staticクラスになる)
package sample.test;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.ShareCompat;
import android.view.ActionProvider;
import android.view.Menu;
import android.view.View;
public class MainActivity extends Activity {
private static Activity mActivity;
@Override
public void onCreate(Bundle bundle) {
super.onCreate(bundle);
mActivity = this;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.actionbar, menu);
return true;
}
public static class ShareActionProvider extends ActionProvider {
public ShareActionProvider(Context context) {
super(context);
}
@Override
public View onCreateActionView() {
return null;
}
@Override
public boolean onPerformDefaultAction() {
ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(mActivity);
builder.setText("hoge fuga foobar");
builder.setChooserTitle("title");
builder.setType("text/*");
builder.startChooser();
return super.onPerformDefaultAction();
}
}
}
staticクラスにしなくてもmenuなXMLでandroid:actionProviderClassを定義せずに
MenuItem menuItem = menu.findItem(R.id.menu_share);
menuItem.setActionProvider(new ActionProvider(this) {
@Override
public View onCreateActionView() {
return null;
}
@Override
public boolean onPerformDefaultAction() {
ShareCompat.IntentBuilder builder = ShareCompat.IntentBuilder.from(mActivity);
builder.setText("hoge fuga foobar");
builder.setChooserTitle("title");
builder.setType("text/*");
builder.startChooser();
return super.onPerformDefaultAction();
}
});
という風に扱っても良い。つかstaticクラスでグダるよりはandroid:actionProviderClassを指定せずに、自前でActionProviderなインスタンス作ってActivityなクラスのインスタンスを渡すような感じでコンストラクタなりを作れば良い
んまぁandroid.widget.ShareActionProviderがどうも趣に合わないような場合だとこういう感じで書けなくも無さそう