0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-06-19

#1.今回のテーマ

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

結果画面のレイアウトは以下の通りです。
image.png

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

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

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

⑥トップ画面から引き継いだデータ表示(インテント(getExtra))

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

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項目ずつ確認していきます。

(1)レベル
まず、インテントで渡された名前の確認です。

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

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

次に、レベルを表示する画面項目の確認です。
image.png

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です。

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

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

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

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

correctCountです。

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

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です。
以上から、ソースコードは以下の通りです。

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

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

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です。

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です。

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

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

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

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

①概要
②画面デザイン~トップ画面(Constraint Layout)~
③画面デザイン~ゲーム画面(Linear Layout)~
④画面デザイン~結果画面(Linear Layoutその2)~
⑤トップ画面からの遷移(インテント(putExtra))
⑥トップ画面から引き継いだデータ表示(インテント(getExtra))
⑦問題出題(ロジック実装)
⑧回答ボタン押下(効果音再生(MediaPlayer、正誤判定、次の問題出題)
⑨タイムカウンターの実装(handler)
⑩ゲーム画面から引き継いだゲーム結果表示(インテント)(本記事)
⑪当日日付データ取得
⑫DB保存(SQLite、Insert)
⑬もう一度、トップ画面へ戻るボタン(インテント)
⑭ランキング表示(SQLite、Select)
⑮実機でのテスト
⑯Google Playで公開

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?