Meepo is a retrofit-like router generator for Android. You can use it to create routers for Activities, Fragments and even any things.
repositories {
maven { url "https://jitpack.io" }
}
dependencies {
compile 'com.github.nekocode:Meepo:{lastest-version}'
}
Declare the router interface firstly. Meepo turns your navigation methods into a Java interface.
public interface Router {
@TargetPath("user/{user_id}/detail")
boolean gotoUserDetail(Context context, @Path("user_id") String userId,
@Query("show_title") boolean showTitle);
@TargetClass(StoreActivity.class)
@TargetFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)
void gotoB(Context context, @Bundle("title") String title);
}
If you want to use URI to open your Activity, you need to add an <intent-filter>
element in your manifest file for the corresponding <activity>
element.
<activity android:name=".UserDetailActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<data
android:host="meepo.com"
android:pathPattern="/user/.*/detail"
android:scheme="meepo"/>
</intent-filter>
</activity>
Use the Meepo
class to generate an implementation of your router interface.
final Meepo meepo = new Meepo.Builder()
.config(new UriConfig().scheme("meepo").host("meepo.com"))
.build();
final Router router = meepo.create(Router.class);
Now, you can use the router
's methods to navigate activity instead of startActivity()
directly.
boolean isSucess = router.gotoUserDetail(this, "123", true);
Meepo supports below router annonations currently:
Annotation | Description |
---|---|
@TargetClass |
Declare the target Class (Such as target Activity or Fragment) |
@TargetPath |
Declare the path of URI path (and MimeType) |
@TargetAction |
Declare the Intent action |
@TargetFlags |
Declare the Intent flags |
@Bundle |
Put data into the Intent's Bundle |
@Path |
Replace the URI path's corresponding replacement block with string parameter |
@Query |
Query parameter of the URI |
@QueryMap |
Map of Query parameters |
@RequestCode |
Request code for startActivityForResult() |
You can create custom Parser and GotoAdapter for Meepo. See the sample for more detail. It means that you have the ability to make router for anything.
final ModuleRouter moduleRouter = new Meepo.Builder()
.config(new ModuleConfig("TEST"))
.parser(new ModuleParser())
.adapter(new GotoModuleAdapter())
.build()
.create(ModuleRouter.class);