Androidの画面遷移と、intent


##Androidの画面遷移

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

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

###サンプルコード
```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,*>>
```

を使用する。

アダプタオブジェクトの詳しい説明は、[こちら](https://qiita.com/nipp/items/b65e520783c6d03b9abb)

####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オブジェクトのメソッドを利用します。
２だったら、putExtra()メソッドで、3は、getデータ型Extra()メソッドです。

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

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

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