Мой Kotlin таймер перезапускает новый, второй экземпляр таймера перед отменой исходного - PullRequest
0 голосов
/ 19 апреля 2020

Я хочу иметь нормально работающий таймер с кнопкой для воспроизведения и паузы, которая обновляется в соответствии с состоянием таймера. Прямо сейчас, когда я пытаюсь приостановить действие кнопки, она запускает новый экземпляр таймера вместо отмены исходного таймера.

Извините, если это очевидно или глупо. Вот мой фрагмент.

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


    }


'''

Спасибо, извините, если это глупо, это мой первый проект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...