Android Studio + kotlin + SQLiteで音符フラッシュカードアプリを作る　⑩ゲーム画面から引き継いだゲーム結果表示（インテント）

#１．今回のテーマ

前回はタイムカウンターを実装し、プレイタイムを結果画面に渡す処理を実装しました。
今回は、ゲーム画面から渡されたデータを結果画面に表示する処理を実装していきます。


結果画面のレイアウトは以下の通りです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619303/59491028-0e4a-83a4-84ae-19594f3f8e3d.png)


表示する項目は以下の通りです。ゲーム画面から渡されたデータは〇をつけた3つです。
〇レベル
〇正解数
〇タイム
・日付
・名前

その下に3つのボタンがあります。
・保存
・もう一度
・トップへ


#２．ゲーム画面からのデータ取得
やることは第6回で書いたものとほぼ同じです。

[⑥トップ画面から引き継いだデータ表示（インテント(getExtra)）](https://qiita.com/tomohiro-yamashita-5664/items/bf50791fa5355818d7fb)

文字列データはgetStringExtra()、数値データはgetIntExtra()で取得していきます。
ソースコードは以下の通りです。

```kotlin:ResultActivity.kt
class ResultActivity : AppCompatActivity() {

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

        //インテントからレベルを取得
        val level = intent.getStringExtra("level")
        //レベル表示
        var tvLevel = findViewById<TextView>(R.id.tvLevel)
        tvLevel.setText(level)

        //インテントから正解数を取得
        val correctCount = intent.getIntExtra("correctCount", 0).toString()
        //正解数表示
        var tvCorrectCount = findViewById<TextView>(R.id.tvCorrectCount)
        tvCorrectCount.setText(correctCount)

        //インテントからタイム（テキスト）を取得
        val finishTime = intent.getStringExtra("finishTime")
        //タイム表示
        var tvTime = findViewById<TextView>(R.id.tvTime)
        tvTime.setText(finishTime)
    }
}
```

実装内容はどのデータも同じで、以下の流れです。
①インテントからデータを取得
②findViewById()で取得したデータをセットする画面項目を取得
③setText()で②で取得した画面項目にデータを設定

おさらいのために1項目ずつ確認していきます。


（１）レベル
まず、インテントで渡された名前の確認です。

```kotlin:GameActivity.ky
                //レベル
                intent2Result.putExtra("level", level)
```

***level***です。
levelは文字列型なので、***getStringExtra()***で取得します。

次に、レベルを表示する画面項目の確認です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/619303/9bb0d289-fe91-59d4-40a4-5afbac7ba51d.png)

```xml:activity_result.xml
        <TextView
            android:id="@+id/tvLevel"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:text="右手初級"
            android:textSize="24dp"/>
```

idは***tvLevel***です。

ということで、ソースコードは以下になります。

```kotlin:ResultActivity.kt
        //インテントからレベルを取得
        val level = intent.getStringExtra("level")
        //レベル表示
        var tvLevel = findViewById<TextView>(R.id.tvLevel)
        tvLevel.setText(level)
```

（２）正解数
続いて正解数です。
やっていることはレベルと全く同じです。
インテントの確認から。

```kotlin:ResultActivity.kt
                //正解数
                intent2Result.putExtra("correctCount", correctCount)
```

***correctCount***です。


続いて画面項目のid確認。

```xml:activity_result.xml
        <TextView
            android:id="@+id/tvCorrectCount"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:text="00"
            android:textSize="24dp"/>
```

idは***tvCorrectCount***です。
以上から、ソースコードは以下の通りです。

```kotlin:ResultActivity.kt
        //インテントから正解数を取得
        val correctCount = intent.getIntExtra("correctCount", 0).toString()
        //正解数表示
        var tvCorrectCount = findViewById<TextView>(R.id.tvCorrectCount)
        tvCorrectCount.setText(correctCount)
```


（３）タイム
最後にタイムです。
ゲーム画面では以下のコードでインテントにセットしています。

```kotlin:GameActivity.kt
                //タイム（テキスト）
                val timeText = findViewById<TextView>(R.id.tv_time).text
                intent2Result.putExtra("finishTime", timeText)
                //タイム（数値）
                intent2Result.putExtra("timeValue", timeValue)
```

タイムは「mm:ss.x」の形に変換した文字列型の***timeText***と、
100msごとに1カウントアップされた数値型の***timeValue***の2種類を結果画面に引き継ぎました。***timeText***はちょっとわかりにくかったので、***finishTime***という名称で引き渡しています。
画面に表示するのは文字列型の***finishTime***です。

```xml:activity_result.xml
        <TextView
            android:id="@+id/tvTime"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="8dp"
            android:text="00:00.0"
            android:textSize="24dp"/>
```

画面のidは、***tvTime***です。

ソースコードは以下になります。

```kotlin:ResultActivity.kt
        //インテントからタイム（テキスト）を取得
        val finishTime = intent.getStringExtra("finishTime")
        //タイム表示
        var tvTime = findViewById<TextView>(R.id.tvTime)
        tvTime.setText(finishTime)
```


今回は復習がメインでした。
短いですが以上です。

次回は当日日付を取得する処理を実装していきます。





[①概要](https://qiita.com/tomohiro-yamashita-5664/items/e87f90fef9cf34faf9bf)
[②画面デザイン～トップ画面（Constraint Layout）～](https://qiita.com/tomohiro-yamashita-5664/items/72a529e12f292a8e1538)
[③画面デザイン～ゲーム画面（Linear Layout）～](https://qiita.com/tomohiro-yamashita-5664/items/9674fa7c1d0cc2de1c40)
[④画面デザイン～結果画面（Linear Layoutその2）～](https://qiita.com/tomohiro-yamashita-5664/items/08f99be14d2ac2254634)
[⑤トップ画面からの遷移（インテント(putExtra)）](https://qiita.com/tomohiro-yamashita-5664/items/ae86d6273cfc8c13b482)
[⑥トップ画面から引き継いだデータ表示（インテント(getExtra)）](https://qiita.com/tomohiro-yamashita-5664/items/bf50791fa5355818d7fb)
[⑦問題出題（ロジック実装）](https://qiita.com/tomohiro-yamashita-5664/items/a67eeb3fe9cc63eb1c65)
[⑧回答ボタン押下（効果音再生（MediaPlayer、正誤判定、次の問題出題）](https://qiita.com/tomohiro-yamashita-5664/items/8b032855a9377ba9897e)
[⑨タイムカウンターの実装（handler）](https://qiita.com/tomohiro-yamashita-5664/items/8f5633e68f0519d6841f)
[⑩ゲーム画面から引き継いだゲーム結果表示（インテント）（本記事）](https://qiita.com/tomohiro-yamashita-5664/items/0e208a3c1a75c5b13376)
[⑪当日日付データ取得](https://qiita.com/tomohiro-yamashita-5664/items/59513080e5d5f419d6af)
[⑫DB保存（SQLite、Insert）](https://qiita.com/tomohiro-yamashita-5664/items/5a0d967f2e42aa90ee24)
⑬もう一度、トップ画面へ戻るボタン（インテント）
⑭ランキング表示（SQLite、Select）
⑮実機でのテスト
⑯Google Playで公開