Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

Intentと、ふと思いついた実験!(小ネタ)

 どうも!LSSです!

 

 AndroidStudio+Kotlinで、アプリ開発の勉強中です!

 

 今回は、Andoidアプリを作るのにほぼほぼ必須と思われるIntentについて書きます。

 

 

 

 

画面遷移?

 Andoidアプリを作る際に、Activityってのを作って、それに関するコードを書いて…って感じで作っていきますが、Activityっていうのは何か?っていうと、
Activity=画面

でいいみたいです。

 

 例として、簡単なゲームアプリを作るとして、

タイトル画面→メニュー画面→ゲーム画面→結果画面→メニュー画面に戻る

って感じの画面の流れがあったら、

  • 「タイトル画面のActivity」
  • 「メニュー画面のActivity」
  • 「ゲーム画面のActivity」
  • 「結果画面のActivity」

を用意して、切り替えていくって事になります。

 その「切り替え」を行ってくれるのが、今回のネタIntentくんです! 

 

 ちなみに、その「切り替え」は「画面遷移」と呼ばれていますが、Androidの仕様上、実は遷移してるのではなく、「画面の上に別の画面を重ねてる」のが正しい表現になります。 

  つまり、「タイトル画面」から画面タップして「メニュー画面」が出てきた!と見えて、実は
「メニュー画面の下にタイトル画面が隠れてる状態」だったりするんですね。

 で、スマホの◀(戻る)ボタンを押して「タイトル画面に戻った」ように見えて、実は
「タイトル画面の上にのっかっていたメニュー画面を破棄した」のが正しい表現だったりします。

 

 

コードはわずか2行でOK

val it0= Intent(this,MenuActivity::class.java )
startActivity(it0)

 

…以上です!(ちょっと::のあたりが、なんでこうなるか分かりませんが^^;。)

 

 it0は任意の名前(好きに変えちゃってOK!な部分)、
MenuAcivityは呼び出すActivity(画面)の名前です。

 例えばボタンのonClickでclkという関数を呼び出すとしたら、

fun clk(v: View){
val it0= Intent(this,MenuActivity::class.java )
startActivity(it0)
}

こんな感じに書く事で、「ボタンを押すとメニュー画面が出てくる」仕組みが実現します。

 

 

 

ふと思いついた実験と、その結果

 Intentをネタに記事を書こうと思った時に、ふっと湧いた疑問があります。

Intentで呼び出すActivityを、それが置かれているActivity自身にしたらどうなるんだろう?」 

 …という事で、さっそく試してみました!!

 

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
}

fun clk(v: View){
val it0= Intent(this,MainActivity::class.java )
startActivity(it0)
}
}

 

↑こういう感じですね。

 AndroidStudioで新規プロジェクトを作成すると、デフォルトで作られるMainActivityに上記コードを書いて、画面にはボタンを一つ配置、そのonClickに「clk」と書いて、エミュレータで実行してみました!

 

 すんなりコンパイルも通り、ボタンが一つだけの画面(1つめ)が出てきます。

 ボタンを押すと、画面が切り替わったような演出の後、また同じ画面(2つめ)。

 もう一度その画面のボタンを押すと、また同じ画面(3つめ)が出てきます。

 

で、そこでエミュレータスマホの◀を押します。

 画面が切り替わったような演出の後、また同じ画面(2つめ)。

 もう一度◀を押すと、また同じ画面(1つめ)。

 さらにもう一度◀を押すと、エミュレータスマホのデスクトップ?に戻りました。

 

 うん、想定通りでしたが、やはりIntentで呼び出すと、
呼び出したActivityインスタンス(複製)が作られて、
重ねて表示され、
同じActivityでもIntentで呼び出すたびに積み上げられて、
◀で上に積まれたActivityから順に破棄されていって、
最初のActivityで◀を押すとスマホのデスクトップが顔を出す、
という結果でした!

 すっきり納得のいく結果で良かったですwww

 

 

 では、今回はこのへんで!

 次回もまた、よろしくです^^