2016年4月17日日曜日

Androidアプリ開発記 その3(画面遷移)

久々の開発記です。
前回はとりあえずサンプルコードをほとんどそのまま動かしただけでしたが、今回はアプリを作る上で必須の画面遷移について勉強してみます。

まずは用語から。

専門用語の意味がチンプンカンプンだったので、とりあえず今回のテーマに必要そうなものだけ書いてみます。

コンテキスト

Android開発で頻繁に出てくる用語「コンテキスト(Context)」。文脈という意味のとおり、現在のアプリケーションの状態とかそういう情報を持っているらしいです。

getApplicationContext()で取得するのが一般的らしいけど、後で説明する「アクティビティ」内ではthisでも取得できる。thisだと使い方によってはメモリリークが起きることがあるようなので、とりあえずgetApplicationContext()を使えば問題ない?

アクティビティ

「アクティビティ(Activity)」これもよく出てくる用語。これはどういうものかというと、
1 活動状態;活動(action),行動(doing),働き
2 ((しばしば-ties)) (特定の分野の)活動,働き;活動範囲
3 活気,活発(liveliness);活力(energy);(市場の)活況;機敏さ(alertness);活動力,精力
4 (精神や肉体の)正常な働き,機能
5 〔化学〕 活性,(溶液・混合気体の成分の)活量,活動度.
6 〔物理〕 放射能壊変速度:物質から自然に放射線が放出される性質;単位時間に崩壊する放射性物質の原子の数で放射能強度を表し,通例,キュリー(curies,Ci)で示す.
7 組織体(organizational unit);(組織体の果たす)機能(function).
…なるほどわからん。

辞書通りの意味ではなくて、「アクティビティ=画面」と考えればだいたい間違いなさそうです。画面遷移とは、このアクティビティ間を行ったり来たりする作業ということかな。

アクティビティのレイアウトはXMLファイルで記述するようですが、Android Studioを使えば直感的に作れるので難しく考えずに気楽に作ってみましょう。XMLファイルの中身はあとででも勉強できます。

インテント

これも頻繁に出てきます。インント(Indent)じゃなくてインント(Intent)。
1 意図されたもの,目的,計画
2 意向,意図,(…しようとする)意志((to do))
3 〔法律〕 (特定の目的に向かって行動しようとする)意思,意図,故意
4 意味,趣旨 
…やっぱりわからん。

「目的」とか「意図」という意味から、「アクティビティ間をつなぐ架け橋のようなもの」らしいです。
「やりたいこと」を渡すと、適切なアクティビティを起動してくれるみたい。

ちなみに起動できるのはアクティビティだけではなくて、別のアプリもいけるみたい。URLを渡してブラウザを起動とか、メアドを渡してメーラーを起動とかそういう感じ。

暗黙的インテント

インテントの一種で、起動するものをシステム(Android)にまかせて最適なものを起動してもらうやり方。
URLを渡して、Chromeで開くかFirefoxで開くかはシステムにおまかせ、みたいな感じで使えそうです。

起動できるものが複数あるときは選択画面が出てくるらしい。

明示的インテント

これもインテントの一種で、今度は「このアプリ(アクティビティ)を起動するんだ!!!1」と、起動するものをプログラム側で指定してあげるやり方。
「このURLはChromeで開けよ!絶対だぞ!」というときに使えるっぽい。

もちろん起動したいアプリがインストールされていなければエラーです。多分。

アクティビティ間を遷移してみる

とりあえずアプリ起動は置いておいて、まずはアクティビティ間の遷移。AppCompatActivityを継承して記述します。

まずは暗黙的インテントから。
Intent intent = new Intent(getApplicationContext(), TransitActivity.class);
startActivity(intent);
コンテキストと遷移先アクティビティのクラスを指定するだけ。簡単ですね。

次は明示的インテント。
Intent intent = new Intent();
intent.setClassName("com.example.shimataro.myapplication", "com.example.shimataro.myapplication.TransitActivity");
startActivity(intent);
Intent::setClassName()に起動するアクティビティのクラス名(Javaのクラス名じゃなくてXMLファイルでつけた名前)を指定するところが違います。

多分どちらでも同じですが、コードの量とわかりやすさで個人的には暗黙的インテントが好きです。

戻る

遷移先のアクティビティから遷移元に戻る方法もついでに。
finish();
これだけ。現在のアクティビティを終了して元の場所に戻る、といったイメージで合ってるのかな。

次回予告

次回は、これまたアプリの必需品のダイアログについてお勉強です。

そういえば

Android Studio 2.0がリリースされていましたね。いろいろ機能が加わったみたいですが、はっきりいって実感できるまで使い込んでいません。多分そのうちわかってくるでしょう。多分。

参考

0 件のコメント:

コメントを投稿