Android開発 kotlin ボタン、画面遷移のあれこれ

<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-178389954-1"></script>
<script>
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());

  gtag('config', 'UA-178389954-1');
</script>
#はじめに〜自己紹介〜
工業高校を出てから情報系の専門学校に2年通い今年新卒で就職しました。
ただいまアプリ開発に奮闘中です。
##投稿した経緯
会社でiOS/Androidアプリの開発を頼まれて、Androidアプリの開発でだいぶ手こずっているので今後のためのメモとして投稿します。Flutterとか使った方よかったのかな...(苦）もしかしたら間違っていることがあるかもしれませんが悪しからず。

##開発環境
- iMac 2019モデル Big sur(BootCampでWindowsを使用しています。)
- 32GBメモリ
- Android Studio
- kotlin

#Kotlinとは
はじめにKotlinについて少しだけ語ろうかと思います。
kotlinは比較的に新しいプログラミング言語で、2011年にJetBrainsにより開発され、2017年にGoogleにより、Androidアプリ開発の公式サポートを受けました。JVM上で動作する言語です。Androidだけでなくサーバとかでも使えるみたいです💭最大の特徴はJavaと100％の相互運用が可能というとこでしょうかね！

#本題
SwiftUIでiOSアプリを開発した後にKotlinにうつった時に非常に苦労しました(今もしていますが💦)
では早速いきましょう！

###-ボタン編
Buttonを画面に追加したらxml内にも勝手に追加されます

```xml:activity_main.xml
    <Button
        android:id="@+id/button" <--これ！
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
```
(xml名はその時によりますよ)
xml内の`android:id="@+id/button"`を**MainActivitiy.kt**で使用します。

```kotlin:MainActivity.kt
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
        
            //ここからボタンのコード
            val button: Button = findViewById<Button>(R.id.button)
            button.setOnClickListener{
                //ここに処理内容を書く
                Toast.makeText(this,"タップ",Toast.LENGTH_LONG).show()
             }
           //ここまで
        }
    }
```
findViewByIdで先程のボタン固有のIDを指定します。指定の仕方は`R.id.【id名】`です
ちなみに**<>**の中に入ってるのは変数の型です。今回はボタンを押したらトースト通知が出る処理を書きました!これでボタンの基本は大体オッケーです👍`setOnClickListener`はボタン以外にも画像などにもしようできますよ!

### -画面遷移編
アプリ作成時には欠かせない画面遷移です。今回はもっとも簡単に実装できる方法をご紹介します
####手順
> 1.**ファイル→新規→空のアクティビティ(任意)**からアクティビティを追加します。
　>ここで設定した名前をあとから使用します。わかりやすくしときましょう！
> 2.遷移元のktファイルに遷移のためのコードを書きます。
> 3.遷移先のktファイルに戻るためのコードを書きます。

####実装例
遷移元ktファイル

```kotlin:MainActivity.kt
    class MainActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val button: Button = findViewById<Button>(R.id.button)
            button.setOnClickListener{
                //ここから遷移用のコード
                val intent = Intent(this,MainActivity2::class.java)    //intentインスタンスの生成(第二引数は遷移先のktファイル名)
                startActivity(intent)
                //ここまで
            }
        }
    }
```
遷移先ktファイル

```kotlin:MainActivity2.kt
    class MainActivity2 : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main2)
        }
        val button2:Button = findViewById<Button>(R.id.button2)
        button2.setOnClickLitener{
            finish()    //これが画面遷移元へ戻るやつ
        }
    }
```
今回はボタンで画面遷移を行うようにしました。
これで、遷移元のボタンを押すと遷移先に遷移し、遷移先のボタンをおすと遷移元の画面に戻ってきます。
ついでに**Intentを使用した**値渡しのコードも紹介します

```kotlin:MainActivity.kt
    val button:Button = findViewById<Button>(R.id.button)
    button.setOnClickListener{
        val intent = Intent(this,MainActivity2::class.java)
        val text = "Hello,Kotlin!"
        intent.putExtra("TEXT_KEY",text)                       //第一引数KEY値(何でも良い),第二引数渡したい値
   }
```
```kotlin:MainActivity2.kt
    class MainActivity2 : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main2)
        }
        val text = intent.getStringExtra("TEXT_KEY")        //遷移元で指定したKEYを使用してデータを受け取る
    }
```
意外と簡単に画面遷移の実装と値の受け渡しができますね！

今回はここまでにしておきます。
また何か分かったら随時更新していこうと思います。

わかりにくい点や間違っているところがありましたらコメント欄にてお願いします。