この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
routable-androidとは
routable-androidとは、Androidアプリ内で使用可能なURLを作成するためのルーターです。 例えば、「/foo」というURLと特定のActivityをマッピングし、URLを指定して起動させることができます。 また、「foo/:param」のように、パラメータを渡すこともできます。
環境
今回使用した動作環境は以下のとおりです。
- OS : MacOS X 10.7.4
- Android OS : 4.1.1
まずはroutable-androidを取得しましょう。
% git clone https://github.com/usepropeller/routable-android.git
cloneしたディレクトリをAndroid Liblaryプロジェクトとして参照するか、 Router.javaを任意のプロジェクトにコピーすれば使用することができます。
サンプルを作成して試してみる
適当なAndroidプロジェクトを作成し、「UserActivity」と「BookActivity」を追加しましょう。 デフォルトで作成されたMainActivityに対して次のような記述を追加します。
・
・
・
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//ルーティング情報を定義
Router.sharedRouter().setContext(getApplicationContext());
Router.sharedRouter().map("users/:id", UserActivity.class);
Router.sharedRouter().map("books/:name/:category", BookActivity.class);
setContentView(R.layout.activity_main);
}
//ボタンクリック時にUserActivityを開く
public void clickUser(View view) {
Router.sharedRouter().open("users/100");
}
//ボタンクリック時にBookActivityを開く
public void clickBook(View view) {
Router.sharedRouter().open("books/akudagawa/ShortStory");
}
・
・
・
基本的な使い方は簡単で、Router.sharedRouter().map関数でURLとアクティビティをマッピングし、 Router.sharedRouter().open関数でアクティビティを起動させます。
上記サンプルでは、MainActivity作成時に他のアクティビティへのルーティング情報を定義しています。 また、:を使用して、パラメータを渡せるようにもしています。 cliclUserとclickBookは、activity_mainに配置したボタンクリック時に起動するメソッドです。 layout/activity_main.xmlにボタンを配置し、android:onClickでこれらの関数が起動するようにしておいてください。
UserActivityは下記のようになっています。 URLで指定されたパラメータは、Bundleを通じて取得できます。
・
・
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//パラメータを取得
Bundle intentExtras = getIntent().getExtras();
String userId = (String) intentExtras.get("id");
Log.d("PARAM", "userId = " + userId);
setContentView(R.layout.activity_user);
}
・
・
BookActivityです。パラメータが複数あっても同じように取得できます。
・
・
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//パラメータを取得
Bundle intentExtras = getIntent().getExtras();
String name = (String) intentExtras.get("name");
String category = (String) intentExtras.get("category");
Log.d("PARAMS", "name = " + name + ",category = " + category);
setContentView(R.layout.activity_book);
}
・
・
このライブラリを使用すると、アクティビティの関連が1箇所にまとめられるので、管理が楽になりますね。