Fragment Creator

Additional

Language
Java
Version
0.7.0 (Feb 27, 2016)
Created
Jan 6, 2016
Updated
Jan 5, 2019 (Retired)
Owner
Toshihiro Yagi (sys1yagi)
Contributors
Toshihiro Yagi (sys1yagi)
Takao Chiba (chibatching)
2
Activity
Badge
Generate
Download
Source code
APK file

Commercial

Fragment Creator

Fragment Creator is a code generation library to manage fragment class creation and arguments for Android.

I wrote the newInstance method every time when declaring a new Fragment. Then, call Fragment#getArguments() and call a get method that is adapted parameter type (ex. getString(), getParcelable()). It's so a boring boilerplate code.

This library helps you to manage fragment class creation and arguments.

Fragment Creator 2.0.0

Fragment Creator 2.0.0 or later supports AndroidX. It can be used only with androidx.fragment.app.Fragment.

How to use

Annotate the arguments of Fragment

@FragmentCreator
public class MainFragment extends Fragment {

    @Args
    String keyword;

    @Args(require = false)
    String userId;
}

Then, MainFragmentCreator is generated.

Create fragment with the FragmentCreator

MainFragment instance = MainFragmentCreator
                            .newBuilder("keyword")
                            .build();

MainFragment instance = MainFragmentCreator
                            .newBuilder("keyword")  // required
                            .setUserId("mike")      // optional
                            .build();

Read the arguments with the FragmentCreator

public MainFragment extends Fragment {

    @Args
    String keyword;

    @Args(require = false)
    String userId;

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        MainFragmentCreator.read(this);

        // this.keyword, this.userId are initialized.
    }
}

Default value

You can set default value.

public MainFragment extends Fragment {

    // The default value can be set only if the argument is optional.
    @Args(require = false, defaultString = "unknown")
    String keyword;

    @Args(require = false, defaultInt = -1)
    int userId;

}

Supported types

  • primitive type
  • java.lang.String
  • java.lang.Boolean
  • java.lang.Byte
  • java.lang.Character
  • java.lang.Short
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Float
  • java.lang.Double

Private field

You should declare a setter method if using private field.

public MainFragment extends Fragment {

    @Args
    String keyword;

    @Args(require = false)
    private String userId;

    public String setUserId(String userId){
        this.userId = userId;
    }
}

Type Serializer

If you want to use the class such as the following, you can use the ArgsSerializer.

// It is not Serializable or Parcelable.
public class Product {

    public int id;

    public String name;
}

At first, define a class that implements the ArgsSerializer.

public class StringSerializer implements ArgsSerializer<Product, String> {

    @Override
    public String serialize(Product product) {
        return product.getId() + "," + product.getName();
    }

    @Override
    public Product deserialize(String str) {
        String[] split = str.split(",");
        Product product = new Product();
        product.setId(Integer.parseInt(split[0]));
        product.setName(split[1]);
        return product;
    }
}

Set @Serializer.

@FragmentCreator
public class MainFragment extends Fragment {
    @Args
    @Serializer(to = String.class, serializer = StringSerializer.class)
    Product product;
//...

Supported types

  • primitive type
  • java.lang.String
  • java.lang.Boolean
  • java.lang.Byte
  • java.lang.Character
  • java.lang.Short
  • java.lang.Integer
  • java.lang.Long
  • java.lang.Float
  • java.lang.Double
  • java.lang.CharSequence
  • android.os.Parcelable
  • java.io.Serializable
  • java.util.ArrayList<? extends android.os.Parcelable>
  • java.util.ArrayList<java.lang.Integer>
  • java.util.ArrayList<java.lang.String>
  • java.util.ArrayList<java.lang.CharSequence>

Not supported yet

  • android.os.Parcelable[]
  • android.util.SparseArray<? extends android.os.Parcelable>
  • boolean[]
  • byte[]
  • short[]
  • char[]
  • int[]
  • long[]
  • float[]
  • double[]
  • java.lang.String[]
  • java.lang.CharSequence[]
  • android.os.Bundle

Installation

This library is distributed by JitPack. Add dependencies your build.gradle

apt 'com.github.sys1yagi.fragment-creator:processor:2.0.0'
compile 'com.github.sys1yagi.fragment-creator:library:2.0.0'

Development

Show version

$ ./gradlew version

Bump version

$ ./gradlew bumpMajor
$ ./gradlew bumpMinor
$ ./gradlew bumpPatch

Generate README

$ ./gradlew genReadMe