#1.今回のテーマ
前回はタイムカウンターを実装し、プレイタイムを結果画面に渡す処理を実装しました。
今回は、ゲーム画面から渡されたデータを結果画面に表示する処理を実装していきます。
表示する項目は以下の通りです。ゲーム画面から渡されたデータは〇をつけた3つです。
〇レベル
〇正解数
〇タイム
・日付
・名前
その下に3つのボタンがあります。
・保存
・もう一度
・トップへ
#2.ゲーム画面からのデータ取得
やることは第6回で書いたものとほぼ同じです。
⑥トップ画面から引き継いだデータ表示(インテント(getExtra))
文字列データはgetStringExtra()、数値データはgetIntExtra()で取得していきます。
ソースコードは以下の通りです。
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)レベル
まず、インテントで渡された名前の確認です。
//レベル
intent2Result.putExtra("level", level)
levelです。
levelは文字列型なので、***getStringExtra()***で取得します。
<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です。
ということで、ソースコードは以下になります。
//インテントからレベルを取得
val level = intent.getStringExtra("level")
//レベル表示
var tvLevel = findViewById<TextView>(R.id.tvLevel)
tvLevel.setText(level)
(2)正解数
続いて正解数です。
やっていることはレベルと全く同じです。
インテントの確認から。
//正解数
intent2Result.putExtra("correctCount", correctCount)
correctCountです。
続いて画面項目のid確認。
<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です。
以上から、ソースコードは以下の通りです。
//インテントから正解数を取得
val correctCount = intent.getIntExtra("correctCount", 0).toString()
//正解数表示
var tvCorrectCount = findViewById<TextView>(R.id.tvCorrectCount)
tvCorrectCount.setText(correctCount)
(3)タイム
最後にタイムです。
ゲーム画面では以下のコードでインテントにセットしています。
//タイム(テキスト)
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です。
<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です。
ソースコードは以下になります。
//インテントからタイム(テキスト)を取得
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で公開