visible true

技術的なメモを書く

JSR 269の勉強がてらFragment生成と引数周りを楽にするfragment-creatorというライブラリを作った

aptしてますか。 正確にはPluggable Annotation Processing API(JSR 269)なので以降はJSR 269と書きます。

Dagger2やRealmなどJSR 269でコード生成を行っているライブラリ群の理解を深め、あわよくばcontributionするためJSR 269を勉強しつつチョットしたライブラリを作りることにしました。

完成したものが以下。

sys1yagi/fragment-creator - Java - GitHub

FragmentのnewInstanceメソッドとArgumentsの取扱いにまつわる部分を生成するライブラリです。

使い方

使い方はREADME.mdを見てもらえばわかるとは思いますが一応簡単に書いておきます。

以下のようにFragmentにアノテーションを付与するとMainFragmentCreatorというクラスが生成されます。

@FragmentCreator
public class MainFragment extends Fragment {
    @Args
    String keyword;
    @Args(require = false)
    String userId;
}

あとは使うだけ。

※0.6.0以降ではBuilder周りの使い方が変わっています。fragment-creator 0.6.0 releasedを参照してください。

MainFragment fragment = MainFragmentCreator.Builder
  .newInstance("keyword") // requiredな値はここで渡す
  .setUserId("userId")    // optionalな値はsetterで渡す
  .build();

FragmentのonCreate()でArgumentsの読み込みを行います。

@Args
String keyword;
@Args(require = false)
String userId;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  MainFragmentCreator.read(this);
  //keyword, userIdが初期化される
}

らくちんだ。

参考にしたもの

今後

とりあえず使えるようにはなったもののまだ機能が足りないのでvalidatorとかconverterとか設定できるようにしようかなと思います。あとKotlin化してkaptでハマった上で修正をKotlinに出せたらいいかなとか。