簡體   English   中英

離開活動時如何停止測驗倒計時?

[英]How to stop the quiz countdown when i leave the activity?

嘿伙計們,我在這里有一個簡單的測驗代碼,但我在這里遇到了兩個問題。 首先,我將在下面向您展示我的代碼:

    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])
                                         }
                                     }

Now i will tell the second problem, the problem is when i the the app run the onBackPressed() function, after leave the activity the result SingleQuizResultActivity::class.java still show, whatever i pressed back button or closing the app, the result仍然顯示。 你能幫我如何強制停止嗎?

下面的代碼

 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)
            }
        }

    ```

您可以使用 Android 生命周期中的onPause方法。

當 Activity 處於后台時, onPause()方法將執行,或者 Activity 對用戶不可見並在執行onPause()方法時進入后台

override fun onPause() {
    super.onPause()
    //Your code to stop timer
}
Please read this article:>

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

在 onPause() 方法中停止計時器,然后在您想使用它時再次啟動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM