Android开源:Meepo-类似 Retrofit 的跳转路由
fugees
8年前
<p style="text-align:center"><img src="https://simg.open-open.com/show/5123262d1b3c76b32c02bcd810eb43b8.jpg"></p> <h2>Meepo</h2> <p>Meepo is a <strong> <a href="/misc/goto?guid=4958964956869128717" rel="nofollow,noindex">retrofit</a> </strong> -like router generator for Android. You can use it to create routers for Activities, Fragments and even any things.</p> <h3>Install</h3> <pre> <code class="language-java">repositories { maven { url "https://jitpack.io" } } dependencies { compile 'com.github.nekocode:Meepo:{lastest-version}' }</code></pre> <h2>Usage</h2> <p>Declare the router interface firstly. Meepo turns your navigation methods into a Java interface.</p> <pre> <code class="language-java">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); }</code></pre> <p>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.</p> <pre> <code class="language-java"><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></code></pre> <p>Use the Meepo class to generate an implementation of your router interface.</p> <pre> <code class="language-java">final Meepo meepo = new Meepo.Builder() .config(new UriConfig().scheme("meepo").host("meepo.com")) .build(); final Router router = meepo.create(Router.class);</code></pre> <p>Now, you can use the router 's methods to navigate activity instead of startActivity() directly.</p> <pre> <code class="language-java">boolean isSucess = router.gotoUserDetail(this, "123", true);</code></pre> <h2>Router Annonation</h2> <p>Meepo supports below router annonations currently:</p> <table> <thead> <tr> <th>Annonation</th> <th>Description</th> </tr> </thead> <tbody> <tr> <td>@TargetClass</td> <td>Declare the target Class (Such as target Activity or Fragment)</td> </tr> <tr> <td>@TargetPath</td> <td>Declare the path of URI path (and MimeType)</td> </tr> <tr> <td>@TargetAction</td> <td>Declare the Intent action</td> </tr> <tr> <td>@TargetFlags</td> <td>Declare the Intent flags</td> </tr> <tr> <td>@Bundle</td> <td>Put data into the Intent's Bundle</td> </tr> <tr> <td>@Path</td> <td>Replace the URI path's corresponding replacement block with string parameter</td> </tr> <tr> <td>@Query</td> <td>Query parameter of the URI</td> </tr> <tr> <td>@QueryMap</td> <td>Map of Query parameters</td> </tr> <tr> <td>@RequestCode</td> <td>Request code for startActivityForResult()</td> </tr> </tbody> </table> <h2>Custom Parser and GotoAdapter</h2> <p>You can create custom Parser and GotoAdapter for Meepo. See the <strong> <a href="/misc/goto?guid=4959747706619448765" rel="nofollow,noindex">sample</a> </strong> for more detail. It means that you have the ability to make router for anything.</p> <pre> <code class="language-java">final ModuleRouter moduleRouter = new Meepo.Builder() .config(new ModuleConfig("TEST")) .parser(new ModuleParser()) .adapter(new GotoModuleAdapter()) .build() .create(ModuleRouter.class);</code></pre> <p> </p> <p>项目主页:<a href="http://www.open-open.com/lib/view/home/1492653726254">http://www.open-open.com/lib/view/home/1492653726254</a></p> <p> </p>