Kotlinで始めるAndroidアプリ入門（後編）


* [Kotlinで始めるAndroidアプリ入門（前編）](https://qiita.com/k-ysd/items/4efdecdfd60afe333a3a)
* [Kotlinで始めるAndroidアプリ入門（中編）](https://qiita.com/k-ysd/items/f428072e9b5db9285cf3)
* Kotlinで始めるAndroidアプリ入門（後編）

## 送信ボタン押下時のロジックを作る

[中編](https://qiita.com/k-ysd/items/f428072e9b5db9285cf3)で作成した最初の画面で、ボタンを押したときに２つ目の画面へテキストボックスの文字列を送信するロジックを作りましょう。

左のプロジェクトウィンドウから、app > java > com.example.myfirstapp > MainActivity.java を選択します。「com.example.myfirstapp」の部分には、前編で入力したプロジェクト名が入ります。
![mainActivity.png](https://qiita-image-store.s3.amazonaws.com/0/113146/41f134b9-9ef2-c968-06d8-6a4e53301210.png "mainActivity.png")

sendMessageメソッドを追加します。このメソッドは、[android:OnClick](https://developer.android.com/reference/android/view/View#attr_android:onClick)との互換性が必要なので、次の制約があります。

 * publicアクセスであること（Kotlinではデフォルトがpublicです）
 * 戻り値がvoidであること
 * 引数が[View](https://developer.android.com/reference/android/view/View.html)のみであること。

送信ボタン押下時に画面遷移させるので、[Intent](https://developer.android.com/reference/android/content/Intent.html)オブジェクトを作ります。このIntentオブジェクトにテキストボックスの文字列をセットします。

また、このメッセージを示すキーとして、定数EXTRA_MESSAGEを用意します。

MainActivityクラスは次のようになります。DisplayMessageActivityはこのあと作るクラスなので、まだエラー（文字が赤色になっている状態）のままで大丈夫です。

```kotlin
class MainActivity : AppCompatActivity() {
    val EXTRA_MESSAGE: String = "com.example.myfirstapp.MESSAGE"
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
    }

    /* Sendボタン押下時 */
    fun sendMessage(view: View) {
        val intent: Intent = Intent(this@MainActivity,
                DisplayMessageActivity::class.java)
        val editText: EditText = findViewById(R.id.editText) as EditText
        val message: String = editText.text.toString()
        intent.putExtra(EXTRA_MESSAGE, message)
        startActivity(intent)
    }
}
```

逆に、DisplayMessageActivity以外のエラーはクリアします。下の画像では「View」がエラーになっています。この場合はimport文が不足しているためエラーになっているので、option+enter（windowsでは、alt+enter）キーで自動的にimport文が生成されます。文字色から赤が消えたらOKです。

![import.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/113146/0242a872-c977-2701-bd07-abf039f80129.png)



## アクティビティにsendMessageメソッドを設定する

左のプロジェクトウィンドウから app > res > layout > activity_main.xml を選択します。

デザインタブでボタンをクリックし、右の属性ウィンドウでonClickプロパティのプルダウンからsendMessage MainActivityを選択します。

プルダウンにsendMessageが出てこない場合、MainActivity.javaがエラーになっている可能性があります。MainActivity.javaを見直してみてください（DisplayMessageActivityの部分はエラーのままでOK）。

![setOnClick.png](https://qiita-image-store.s3.amazonaws.com/0/113146/651f41df-c787-9921-2a21-09c986c98219.png "setOnClick.png")


## ２つ目の画面を作る

左のプロジェクトウィンドウで app を右クリックし、　新規 > アクティビティ > 空のアクティビティ を選択します。

![emptyActivity.png](https://qiita-image-store.s3.amazonaws.com/0/113146/846528ac-90c2-5499-670d-6109434e9050.png "emptyActivity.png")

アクティビティ名に「DisplayMessageActivity」を入力し、OKをクリックします。
![displayMessageActivity.png](https://qiita-image-store.s3.amazonaws.com/0/113146/51b9836f-03cb-e3a2-cd4e-44e47b544625.png "displayMessageActivity.png")

この新しい画面に、最初の画面でテキストボックスへ入力した文字列を表示しましょう。表示するためのテキストビューを設定します。

左のプロジェクトウィンドウで　app > res > layout > activity_display_message.xml を開きます。パレットウィンドウで text > TextView をドラッグアンドドロップします。

![createTextView.png](https://qiita-image-store.s3.amazonaws.com/0/113146/ee0fc02d-8f47-1535-057e-2ef7b545b9c3.png "createTextView.png")

## ２つ目の画面にメッセージを表示する

最初の画面から受け取ったメッセージを画面に表示しましょう。

左のプロジェクトウィンドウから、app > java > com.example.myfirstapp > DisplayMessageActivity.kt を選択します。onCreckメソッドに以下を追加します。
「com.example.myfirstapp」の部分には、前編で入力したプロジェクト名が入ります。

```kotlin
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_display_message)

        // Activity開始時にIntentを取得し、文字列をセットする
        val intent: Intent = getIntent()
        val message: String = intent.getStringExtra(MainActivity().EXTRA_MESSAGE)
        val textView: TextView = findViewById(R.id.textView)
        textView.setText(message)
    }
```

## Upナビゲーションを追加する

Upボタンをタップした際に、２つ目の画面から最初の画面へ戻れるようにします。AndroidManifest.xmlに親画面を設定します。

左のプロジェクトウィンドウから app > manifests > AndroidManifest.xml を選択します。
![setParent.png](https://qiita-image-store.s3.amazonaws.com/0/113146/24b6aab1-5caa-0568-bf33-37b10182e1f2.png "setParent.png")

DisplayMessageActivity の <activity> タグに親画面の情報を記載します。

```xml
        <activity
            android:name=".DisplayMessageActivity"
            android:parentActivityName=".MainActivity">
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value=".MainActivity" />
        </activity>
```

## 動かしてみる

さっそく動かしてみましょう。テキストボックスになにか文字列を入力してボタンを押します。２つ目の画面にその文字列が表示されれば成功です。

![firstActivity.png](https://qiita-image-store.s3.amazonaws.com/0/113146/2eeb8a14-a9af-f738-94c0-799869525080.png "firstActivity.png")
![secondActivity.png](https://qiita-image-store.s3.amazonaws.com/0/113146/d2bfe408-92d3-f130-e6a9-2950184cff7d.png "secondActivity.png")