离开活动时如何停止测验倒计时?



嘿伙计们,我这里有一个简单的测验代码,但我在这里遇到了两个问题。 首先,我将在下面向您展示我的代码:

class SingleQuizQuestionActivity : AppCompatActivity() {
val URL_QUESTION = "https://blabla.com/app/blabla/question.php"
internal lateinit var b1: Button
internal lateinit var b2: Button
internal lateinit var b3: Button
internal lateinit var b4: Button
internal lateinit var back: Button
internal lateinit var bnr: TextView
internal lateinit var jlh:TextView
internal lateinit var btnscore: Button
internal lateinit var t1_question: TextView
internal lateinit var btn: Button
private lateinit var Handler : Handler
private lateinit var Runnable : Runnable
internal lateinit var reference: DatabaseReference
internal var questionNumber = 0
internal var correct = 0
internal var wrong = 0
var totall: Int = 1
lateinit var noInternetDialog: NoInternetDialog
private fun generateRandomNumbre(): Int {
var random: Int = 1
random = (1..20).random()
return random
}
override fun onBackPressed() {
val alertDialog = AlertDialog.Builder(this)
.setTitle("Keluar Game")
.setMessage("Anda Yakin Ingin Keluar Dari Game")
.setPositiveButton("Ya") { _, _ ->
super.onBackPressed()
finish()
}
.setNegativeButton("Tidak") { _, _ -> }
alertDialog.show()
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_single_quiz_question)
b1 = findViewById<View>(R.id.button1) as Button
b2 = findViewById<View>(R.id.button2) as Button
b3 = findViewById<View>(R.id.button3) as Button
b4 = findViewById<View>(R.id.button4) as Button
back = findViewById<View>(R.id.backk) as Button
jlh = findViewById<View>(R.id.texttitle) as TextView
bnr = findViewById<View>(R.id.ttl) as TextView
t1_question = findViewById<View>(R.id.questionsTxt) as TextView
btn = findViewById<View>(R.id.btntimer) as Button
btnscore = findViewById<View>(R.id.btnscores) as Button
Handler = Handler()
totall = generateRandomNumbre()
question(totall.toString())
back.setOnClickListener {
onBackPressed()
}
noInternetDialog = NoInternetDialog.Builder(this)
.setBgGradientStart(ContextCompat.getColor(this, R.color.colorPrimary))
.setBgGradientCenter(ContextCompat.getColor(this, R.color.colorPrimary))
.setBgGradientEnd(ContextCompat.getColor(this, R.color.colorPrimary))
.setWifiLoaderColor(ContextCompat.getColor(this, R.color.colorWhite))
.setButtonTextColor(ContextCompat.getColor(this,R.color.black))
.setButtonIconsColor(ContextCompat.getColor(this,R.color.black))
.setButtonColor(ContextCompat.getColor(this, R.color.colorAccent)).build()
}
inner class MyCounter(millisInFuture: Long, countDownInterval: Long) : CountDownTimer(millisInFuture, countDownInterval) {
override fun onFinish() {
wrong++
question(totall.toString())
}
override fun onTick(millisUntilFinished: Long) {
btntimer.text = (millisUntilFinished / 1000).toString() + ""
println("Timer  : " + millisUntilFinished / 1000)
}
}
private fun question(total: String) {
val stringRequest = object : StringRequest(Request.Method.POST, URL_QUESTION,
Response.Listener { response ->
try {
val jsonObject = JSONObject(response)
val success = jsonObject.getString("success")
val jsonArray = jsonObject.getJSONArray("question")
if (success == "1") {
for(i in 0 until jsonArray.length())
{
var `object` = jsonArray.getJSONObject(i)
var soal = `object`.getString("soal").trim()
var jawaban = `object`.getString("jawaban").trim()
var opsi1 = `object`.getString("opsi1").trim()
var opsi2 = `object`.getString("opsi2").trim()
var opsi3 = `object`.getString("opsi3").trim()
questionNumber ++
if (questionNumber > 20) {
val one = btnscore.text.toString()
val two = one.toInt()
val i = Intent(this@SingleQuizQuestionActivity, SingleQuizResultActivity::class.java)
i.putExtra("correct", correct.toString())
i.putExtra("incorrect", wrong.toString())
i.putExtra("score",two)
finish()
startActivity(i)
} else {
jlh.setText("Pertanyaan "+questionNumber.toString()+" / 20")
bnr.setText("Benar :n"+correct.toString()+" / 20")
val timer = MyCounter(20000,1000)
timer.start()
t1_question.text = soal
var corectPos : Int = Random.nextInt(0,4)
val buttons = arrayOf(
b1,b2,b3,b4
)
val answers:Array<String?> = arrayOf(
jawaban,
opsi1,
opsi2,
opsi3
)
for(i:Int in 0 until 4){
if (i != corectPos){
if (i == 3) {
buttons[i].setText(answers[corectPos])
}
else {
buttons[i].setText(answers[i])
}
}
else{
buttons[i].setText(answers[3])
}
}
b1.setOnClickListener {
timer.cancel()
if (b1.text.toString() == jawaban) {
b1.setBackgroundResource(R.drawable.optionbnr)
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
Runnable = java.lang.Runnable {
correct++
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
updatescore()
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
}
Handler.postDelayed(Runnable,1000)
} else {
wrong++
b1.setBackgroundResource(R.drawable.optionslh)
if (b2.text.toString() == jawaban) {
b2.setBackgroundResource(R.drawable.optionbnr)
} else if (b3.text.toString() == jawaban) {
b3.setBackgroundResource(R.drawable.optionbnr)
} else if (b4.text.toString() == jawaban) {
b4.setBackgroundResource(R.drawable.optionbnr)
}
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
Runnable = java.lang.Runnable {
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
}
Handler.postDelayed(Runnable,1000)
}
}
b2.setOnClickListener {
timer.cancel()
if (b2.text.toString() == jawaban) {
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
b2.setBackgroundResource(R.drawable.optionbnr)
Runnable = java.lang.Runnable {
correct++
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
updatescore()
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
}
Handler.postDelayed(Runnable,1000)
} else {
wrong++
b2.setBackgroundResource(R.drawable.optionslh)
if (b1.text.toString() == jawaban) {
b1.setBackgroundResource(R.drawable.optionbnr)
} else if (b3.text.toString() == jawaban) {
b3.setBackgroundResource(R.drawable.optionbnr)
} else if (b4.text.toString() == jawaban) {
b4.setBackgroundResource(R.drawable.optionbnr)
}
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
Runnable = java.lang.Runnable {
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
}
Handler.postDelayed(Runnable,1000)
}
}
b3.setOnClickListener {
timer.cancel()
if (b3.text.toString() == jawaban) {
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
b3.setBackgroundResource(R.drawable.optionbnr)
Runnable = java.lang.Runnable {
correct++
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
updatescore()
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
}
Handler.postDelayed(Runnable,1000)
} else {
wrong++
b3.setBackgroundResource(R.drawable.optionslh)
if (b1.text.toString() == jawaban) {
b1.setBackgroundResource(R.drawable.optionbnr)
} else if (b2.text.toString() == jawaban) {
b2.setBackgroundResource(R.drawable.optionbnr)
} else if (b4.text.toString() == jawaban) {
b4.setBackgroundResource(R.drawable.optionbnr)
}
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
Runnable = java.lang.Runnable {
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
}
Handler.postDelayed(Runnable,1000)
}
}
b4.setOnClickListener {
timer.cancel()
if (b4.text.toString() == jawaban) {
b4.setBackgroundResource(R.drawable.optionbnr)
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
Runnable = java.lang.Runnable {
correct++
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
updatescore()
}
Handler.postDelayed(Runnable,1000)
} else {
wrong++
b4.setBackgroundResource(R.drawable.optionslh)
if (b1.text.toString() == jawaban) {
b1.setBackgroundResource(R.drawable.optionbnr)
} else if (b2.text.toString() == jawaban) {
b2.setBackgroundResource(R.drawable.optionbnr)
} else if (b3.text.toString() == jawaban) {
b3.setBackgroundResource(R.drawable.optionbnr)
}
b1.isEnabled = false
b2.isEnabled = false
b3.isEnabled = false
b4.isEnabled = false
Runnable = java.lang.Runnable {
b1.setBackgroundResource(R.drawable.opnormal)
b2.setBackgroundResource(R.drawable.opnormal)
b3.setBackgroundResource(R.drawable.opnormal)
b4.setBackgroundResource(R.drawable.opnormal)
b1.isEnabled = true
b2.isEnabled = true
b3.isEnabled = true
b4.isEnabled = true
var randomlagi = generateRandomNumbre()
question(randomlagi.toString())
}
Handler.postDelayed(Runnable,1000)
}
}
}
}
}
} catch (e: JSONException) {
e.printStackTrace()
//                        Toast.makeText(activity, "Error $e", Toast.LENGTH_SHORT).show()
}
}, Response.ErrorListener { error ->  }) {
@Throws(AuthFailureError::class)
override fun getParams(): Map<String, String> {
val params = java.util.HashMap<String, String>()
params["total"] = total
return params
}
}
val requestQueue = Volley.newRequestQueue(this)
requestQueue.add(stringRequest)
}
private fun updatescore(){
val one = btnscore.text.toString()
val time = btntimer.text.toString()
val two = one.toInt()
val timee = time.toInt()
var tri = 0
if (timee > 9)
{
tri = two + (10*1)
}
else
{
tri = two + (1 * timee)
}
val four = tri.toString()
btnscore.text = four
}
}

好的,我会告诉第一个问题,问题是,答案只是在按钮 1 和按钮 4 中出现。答案永远不会在按钮 2 或按钮 3.我认为数组和 for 是正确的,但它是错误的,你能帮我吗?

下面的代码:

var corectPos : Int = Random.nextInt(0,4)
val buttons = arrayOf(
b1,b2,b3,b4
)
val answers:Array<String?> = arrayOf(
jawaban,
opsi1,
opsi2,
opsi3
)
for(i:Int in 0 until 4){
if (i != corectPos){
if (i == 3) {
buttons[i].setText(answers[corectPos])
}
else {
buttons[i].setText(answers[i])
}
}
else{
buttons[i].setText(answers[3])
}
}

现在我将告诉第二个问题,问题是当我的应用程序运行onBackPressed((函数时,离开活动后结果仍然显示SingleQuizResultActivity::class.java显示,无论我按下后退按钮还是关闭应用程序,结果仍然显示。 你能帮我如何强制吗?

下面的代码

onBackPressed():
override fun onBackPressed() {
val alertDialog = AlertDialog.Builder(this)
.setTitle("Keluar Game")
.setMessage("Anda Yakin Ingin Keluar Dari Game")
.setPositiveButton("Ya") { _, _ ->
super.onBackPressed()
finish()
}
.setNegativeButton("Tidak") { _, _ -> }
alertDialog.show()
}

我的计时器 :

inner class MyCounter(millisInFuture: Long, countDownInterval: Long) : CountDownTimer(millisInFuture, countDownInterval) {
override fun onFinish() {
wrong++
question(totall.toString())
}
override fun onTick(millisUntilFinished: Long) {
btntimer.text = (millisUntilFinished / 1000).toString() + ""
println("Timer  : " + millisUntilFinished / 1000)
}
}
```
Please read this article:>

https://blog.mindorks.com/android-activity-lifecycle

在 onPause(( 方法中停止计时器,然后在您想要使用它时再次启动。

最新更新