Starting Another Activity

simpleui_send_test_toast前回作成したSendボタンにイベントを設置し、別のActivityに情報設定して表示させるという事を行います。

android:onClick=”sendMessage“という属性をButtonエレメントに追加します。
Android Systemはactivity内の同名の関数をfunction(View view);という形式でコールします。

取りあえずイベント駆動を試したいという事で、トレーニングにはありませんがToastの通知表示を組み込んでいます。実は筆者はToastという機構に触れたのはWindows8が最初でしたが、なるほど、これの真似だったのだなと…。

TipsとしてEclipseのエディタ上でCtrl+Shit+”O”を押すと、不足しているimportを補完してくれる機能が挙げられています。

次にActivity間のやり取りなど、コンポーネントの接続を担うIntentを作成します。
動作が確認できたためToastはコメントアウトしました。

 new Intent(this, DisplayMessageActivity.class);でIntentオブジェクトを作成していますが、この段階ではDisplayMessageActiviyを作成していないので、エディタ上ではエラーが出ています。

受け渡しを行うためのEXTRA_MESSAGEというStatic変数を追加して、findViewByIDで自動生成されたエレメントIDからオブジェクトを取得、後にgetText()で文字列を取得しています。intent.putExtra(EXTRA_MESSAGE, message);でStatic変数へ文字列をセットし、startActivity(intent);でIntentに設定されているActivityが起動します。
我ながら思考回路が低下しているというか、考える能力が欠如しているというか…、putExtraの第一引数はそもそもデータキーであり、intent自体は動的に生成されたデータであって、その中のデータコンテナでデータのやり取りができると、それだけのお話。

……、病むに任せてしまったとは言え脳の退化具合が酷過ぎる。

stating_another_activity_new_activity_00

仕組みは出来上がったので、次は起動するActivityの作成です。
IDEのtoolberのnewボタンからウィザードを起動して、Androidフォルダ内から必要に応じて作成するコンポーネントを選びます。

stating_another_activity_new_activity_01

あとはプロジェクト作成時と同じ要領でActivityの設定が始まり、Activity Nameを変更、Hierarchical Parentで親Activityを指定して完了します。
このウィザードで以下が自動生成されます。
res/menu/display_message.xml
res/layout/activity_display_message.xml
DisplayMessageActivity.java

DisplayMessageActivity.javaは既に最低限のActivityとして機能させるためのコードが埋め込まれています。トレーニングの記事上にはAPI-Level 11で追加されたActionBar APIonHONYCOMBに関する処理をプラットフォームバージョンで判定し、lint errorsを回避するために@SuppressLint(“NewApi”)を追加せよと有ります。どういう事が起こるのかと調べてみるとこういう事のようです。昔のSDKは知りませんが現行のSDK version 22.0.5では該当コードは既にインプリメントされています。

リソースを弄ってActivityのタイトルを変更などは説明するまでも無いので割愛します。
Activityを使用するにはManifestへの記述が必要なんて事を何処かの読み物で読んだ気がしますが、ADTが勝手に追加したようでなかなかお手軽でした。

 meta-dataが追加されていますが、parentActivityNameによるAPI-Level 16以降でのナビゲーションの実装を下位APIでもサポートライブラリにより実現させるための情報だそうです。

今回の趣向であるActivityへのデータ受け渡しのコードは以下の通り

Intent intent = getIntent();でIntentを取得して、
String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);でintentのデータコンテナから文字列を取得。Viewを作成してセットして終わりです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください