创建项目geoquiz
选择EmptyActivity
编程语言选择Kotlin
修改app/src/main/java/MainActivity.kt
package com.bignerdranch.android.geoquizimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*class MainActivity : AppCompatActivity() {private lateinit var trueButton:Buttonprivate lateinit var falseButton:Buttonoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)trueButton = findViewById(R.id.true_button)falseButton = findViewById(R.id.false_button)trueButton.setOnClickListener{view: View ->//do somethingToast.makeText(this,R.string.correct_toast,Toast.LENGTH_SHORT).show()}falseButton.setOnClickListener{view:View->//do somethngToast.makeText(this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show()}}
}
修改app/src/main/res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:orientation="vertical" ><TextView android:layout_width="wrap_content" android:layout_height="wrap_content"android:padding="24dp"android:text="@string/question_text" /><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/true_button"style="?android:attr/buttonBarButtonStyle"android:id="@+id/true_button"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/false_button"style="?android:attr/buttonBarButtonStyle"android:id="@+id/false_button"/></LinearLayout>
</LinearLayout>
修改app/src/main/res/values/strings.xml
<resources><string name="app_name">GeoQuiz</string><string name="question_text">问题1</string><string name="true_button">是</string><string name="false_button">否</string><string name="correct_toast">正确</string><string name="incorrect_toast">错误</string>
</resources>
设置AVD模拟器,运行项目
添加更多的题目
新增app/src/main/java/Question.kt
package com.bignerdranch.android.geoquizimport androidx.annotation.StringResdata class Question(@StringRes val textResId:Int,val answer:Boolean)
修改app/src/main/res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"xmlns:tools="http://schemas.android.com/tools"android:gravity="center"android:orientation="vertical"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:padding="24dp"android:id="@+id/question_text_view"tools:text="@string/question_1"/><LinearLayoutandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:orientation="horizontal" ><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/true_button"style="?android:attr/buttonBarButtonStyle"android:id="@+id/true_button"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/false_button"style="?android:attr/buttonBarButtonStyle"android:id="@+id/false_button"/></LinearLayout><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="@string/next_button"style="?android:attr/buttonBarButtonStyle"android:id="@+id/next_button"/>
</LinearLayout>
修改app/src/main/res/values/strings.xml
<resources><string name="app_name">GeoQuiz</string><string name="question_1">问题1</string><string name="question_2">问题2</string><string name="question_3">问题3</string><string name="question_4">问题4</string><string name="next_button">下一题</string><string name="true_button">是</string><string name="false_button">否</string><string name="correct_toast">正确</string><string name="incorrect_toast">错误</string>
</resources>
修改app/src/main/java/MainActivity.kt
package com.bignerdranch.android.geoquizimport androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.widget.*class MainActivity : AppCompatActivity() {private lateinit var trueButton:Buttonprivate lateinit var falseButton:Buttonprivate lateinit var nextButton:Buttonprivate lateinit var questionTextView: TextViewprivate val questionBank = listOf(Question(R.string.question_1,true),Question(R.string.question_2,false),Question(R.string.question_3,true),Question(R.string.question_4,false),)private var currentIndex = 0override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)trueButton = findViewById(R.id.true_button)falseButton = findViewById(R.id.false_button)nextButton = findViewById(R.id.next_button)questionTextView = findViewById(R.id.question_text_view)trueButton.setOnClickListener{view: View ->//Toast.makeText(this,R.string.correct_toast,Toast.LENGTH_SHORT).show()checkAnswer(true)}falseButton.setOnClickListener{view:View->//Toast.makeText(this,R.string.incorrect_toast,Toast.LENGTH_SHORT).show()checkAnswer(false)}nextButton.setOnClickListener{currentIndex = (currentIndex + 1) % questionBank.sizeupdateQuestion()}updateQuestion()}private fun updateQuestion(){val questionTextResId = questionBank[currentIndex].textResIdquestionTextView.setText(questionTextResId)}private fun checkAnswer(userAnswer:Boolean){val correctAnswer = questionBank[currentIndex].answerval messageResId = if(userAnswer == correctAnswer){R.string.correct_toast}else{R.string.incorrect_toast}Toast.makeText(this,messageResId,Toast.LENGTH_SHORT).show()}
}
运行项目
添加图标资源
Activity的生命周期
引入Jetpack库的ViewModel
为什么需要ViewModel
Jetpack库
jetpack官方
第6章 创建第二个Activity