Androidの画面遷移と、intent


Androidの画面遷移

今回は1枚目の画面のボタンをタップすると、画面が切り替わるという、2画面での遷移についてまとめていきます。

まずは、最初の画面を作る。

サンプルコード

MainActivity.kt
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //画面部品ListViewを取得
        val lvMenu = findViewById<ListView>(R.id.lvMenu)
        //SimpleAdapterで使用するMutableListオブジェクトを用意
        val menuList: MutableList<MutableMap<String, String>> = mutableListOf()
        //「唐揚げ定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録
        var menu = mutableMapOf("name" to "唐揚げ定食", "price" to "800円")
        menuList.add(menu)
        //「~定食」のデータを格納するMapオブジェクトの用意とmenuListへのデータ登録
        menu = mutableMapOf("name" to "ハンバーグ定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "生姜焼き定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "ステーキ定食", "price" to "1000円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "野菜炒め定食", "price" to "750円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "とんかつ定食", "price" to "900円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "ミンチかつ定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "チキンかつ定食", "price" to "900円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "コロッケ定食", "price" to "850円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "回鍋肉定食", "price" to "750円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "麻婆豆腐定食", "price" to "800円")
        menuList.add(menu)
        menu = mutableMapOf("name" to "青椒肉絲定食", "price" to "800円")
        menuList.add(menu)

        //SimpleAdapter第4引数from用のデータの用意
        val from = arrayOf("name", "price")
        //SimpleAdapter第5引数to用のデータの用意
        val to = intArrayOf(android.R.id.text1, android.R.id.text2)
        //SimpleAdapterを生成
        val adapter = SimpleAdapter(
            this@MainActivity, menuList,
            android.R.layout.simple_list_item_2, from, to
        )
        //アダプタの登録
        lvMenu.adapter = adapter
    }
}

アダプタクラスSimpleAdapter

データ構造として、

MutableList<MutableMap<String,*>>

を使用する。

アダプタオブジェクトの詳しい説明は、こちら

SimpleAdapterはインスタンスを生成する際、引数が5個必要

引数 引数名 内容
第1引数 context:Context 「this@アクティビティクラス名」を記述する
第2引数 data:MutableList<MutableMap<String,*>> リストデータそのもの
第3引数 resource:Int リストビューの各行のレイアウトを表すR値
第4引数 from:Array<string> 各画面部品に割り当てるデータを表すMutableMapのキー名配列です。
第5引数 to:IntArray from記載のMutableMapのキー名に対応してデータを割り当てられる画面部品のR値配列です。

画面を追加する

1つ目の画面ができたら、2つ目の画面を作ります。

[File]メニュー >[New]>[Activity]>[Empty Activity]
でウィザード画面を開き、各種設定すると、

・アクティビティクラスの追加
・レイアウトXMLファイルの追加
・AndroidManifest.xmlへの追記

という、3つの作業を行ってくれる。

Android画面遷移の特徴

Androidの画面遷移は、元の画面の上に画面が載る形で表示されます。
画面をタップし、次の画面に「遷移」するのではなく、次の画面が新たに起動し、前の画面の上に表示されます。
戻るボタンをタップすると、起動している画面を終了させることで、前の画面が出てくる。
という仕組みになっています。

intentクラス

画面遷移の中心となるクラスが「intentクラス」で、このクラスが画面、すなわちアクティビティの起動の役割を担います。

具体的には、以下の手順
1,Intentクラスのインスタンスを生成する
2,起動先アクティビティに渡すデータを格納する
3,アクティビティを起動する

2,3ともに、Intentオブジェクトのメソッドを利用します。
2だったら、putExtra()メソッドで、3は、getデータ型Extra()メソッドです。

onClick属性

また、リストビューのタップを検知するリスナの登録は、リスナインターフェイスを実装するこどで行いましたが、
ボタンなどのタップの処理、つまり、onClick処理は、他のものを代用する。
→それが、Androidで用意されていて、android:onClick属性です。

これを画面構成のxmlファイル内のボタンタグ内に記述します。
そして、Kotlinファイルで、メソッドを定義すると、リスナ登録を自動で行ってくれます。

▶︎しかし。定義する上での3つのルールがあります。
・publicなメソッドであること
・戻り値はないこと
・引数はView型1であること