Я хочу иметь нормально работающий таймер с кнопкой для воспроизведения и паузы, которая обновляется в соответствии с состоянием таймера. Прямо сейчас, когда я пытаюсь приостановить действие кнопки, она запускает новый экземпляр таймера вместо отмены исходного таймера.
Извините, если это очевидно или глупо. Вот мой фрагмент.
'''
package com.example.reading5
import com.example.reading5.R
//import android.R
import android.os.Bundle
import android.os.CountDownTimer
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ImageButton
import android.widget.TextView
import androidx.fragment.app.Fragment
import androidx.navigation.NavController
import androidx.navigation.fragment.findNavController
import com.example.reading5.PlayFragmentDirections.action_playFragment_to_settingsFragment2
import kotlinx.android.synthetic.main.fragment_play.*
/**
* A simple [Fragment] subclass.
*/
@Suppress("UNREACHABLE_CODE")
class PlayFragment : Fragment() {
private lateinit var timeCounter: CountDownTimer
private var navController: NavController? = null
var playTextFromArgs: ArrayList<String>? = null
//timer stuff above
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return inflater.inflate(R.layout.fragment_play, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
if (!Helper.playText.isEmpty()) {
playTextBox.text = Helper.playText
}
var startTimer = 61000
var timerCheck = 0
var progressBar1 = this.progressBar
var pausedTimer = 0
settings2_btn.setOnClickListener {
timeCounter.cancel()
findNavController().navigate(R.id.action_playFragment_to_settingsFragment2)
}
generate_btn.setOnClickListener {
// timerCheck : 0 = stopped, 1 = running, 2 = paused
println(timerCheck)
if (timerCheck == 1) {
var pausedTimer = timerCheck
timeCounter.cancel()
timerCheck = 2
generate_btn.setImageResource(R.drawable.play_arrow)
println(timerCheck)
println("timer cancelled")
return@setOnClickListener
} else {
}
if (timerCheck != 1) {
val output = readFromBundle(playTextFromArgs).toString()
playTextBox.text = output
Helper.playText = output
println("timer started")
var timerCheck = 1
if (timerCheck == 2){
var startTimer = pausedTimer
} else {
println(timerCheck)
println("timer finished 1")}
timeCounter = object : CountDownTimer(startTimer.toLong(), 1000) {
override fun onFinish() {
timer.text = "0"
progressBar1.progress = (0)
generate_btn.setImageResource(R.drawable.play_arrow)
var timerCheck = 0
println(timerCheck)
println("timer finished 2")
}
override fun onTick(p0: Long) {
timer.text = (p0 / 1000).toString()
var progressMath = (p0 / 600)
progressBar1.progress = (progressMath).toInt()
println(progressBar1)
println(p0)
println(progressMath)
generate_btn.setImageResource(R.drawable.pause_icon)
println(timerCheck)
println("tick")
}
}.start()
} else {}
stop_btn.setOnClickListener {
if (timeCounter != null) {
timeCounter.cancel()
timerCheck = 0
timer.text = ("60")
progressBar1.progress = (100)
generate_btn.setImageResource(R.drawable.play_arrow)
var startTimer = 61000
println(timerCheck)
println("timer stopped")
}
}
}
}
private fun readFromBundle(playTextFromArgs: ArrayList<String>?) {
val playTextView = view?.findViewById<TextView>(R.id.playTextBox)
val text = playTextFromArgs
playTextView?.text = shuffledText(1, text.toString())
}
private fun shuffledText(size: Int, ourText: String?): String {
return (ourText)?.map { it }?.shuffled()?.subList(0, size)!!.joinToString("")
}
fun shuffleInput(input: String): String {
val characters: MutableList<Char> = ArrayList()
for (c in input.toCharArray()) {
characters.add(c)
}
val output = StringBuilder(input.length)
while (characters.size != 0) {
val randPicker = (Math.random() * characters.size).toInt()
output.append(characters.removeAt(randPicker))
}
println(output.toString())
return output.toString()
}
}
'''
Спасибо, извините, если это глупо, это мой первый проект.