![](/img/trans.png)
[英]How do I correctly stop a Media Player in a CountDown Timer when the activity is Paused?
[英]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.