«Условие if» внутри панели поиска onprogresschange не выполняется - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу изменить изображение и текст в textview, когда условие 'If' внутри обработчика seekBar выполнено, но код внутри этого условия не выполняется. Я пробовал разные способы, например, я поставил жестко закодированные значения, такие как if (progress == 100) {}, но даже это не выполняется. Пожалуйста, покажите мне, что мне делать сейчас. Заранее спасибо !!

open class MainActivity : AppCompatActivity() {
    var imageItem: MutableList<String> = mutableListOf<String>()
    var timeItem: MutableList<Int> = mutableListOf<Int>()
    //    var slideTime: MutableList<Int> = mutableListOf<Int>(2000, 10000, 11000)
    var music: String? = null
    var gson: Gson = GsonBuilder().create()
    var mp: MediaPlayer? = null
    val retrofit =
        Retrofit.Builder()
            .baseUrl("http://165.22.214.137:8002/")
            .addConverterFactory(GsonConverterFactory.create(gson))
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .build()
    val jsonPlaceHolderAPI = retrofit.create(
        JsonPlaceHolderAPI::class.java
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        imageItem.add(R.drawable.ic_launcher_background.toString())
        imageSlider.setSliderTransformAnimation(SliderAnimations.FADETRANSFORMATION);
        getPosts()
        imageSlider.setOnIndicatorClickListener(DrawController.ClickListener { position ->
            imageSlider.setCurrentPagePosition(
                position
            )
        })
        button.setOnClickListener {
            if (mp!!.isPlaying) {
                mp!!.pause()
                button.setBackgroundResource(R.drawable.ic_play_circle_outline_black_24dp)
            } else {
                mp!!.start()
                button.setBackgroundResource(R.drawable.ic_pause_circle_outline_black_24dp)
            }
        }

    }

    //get Json data
    fun getPosts(): List<String> {
        val call = jsonPlaceHolderAPI.imagesDetails
        var n = 0
        call.enqueue(object : Callback<List<ImagePost>> {
            override fun onResponse(
                call: Call<List<ImagePost>>,
                response: Response<List<ImagePost>>
            ) {
                if (!response.isSuccessful) {
                    code.setText("Code:" + response.message())
                }
                val posts = response.body()!!
                for (post in posts) {
                    var content = ""
                    n = post.media.size
                    for (i in 0 until n - 1) {
                        imageItem.add(post.media[i].image)
                        timeItem.add(post.media[i].ms)
                    }
                    music = post.audio
                }

                mp = MediaPlayer()
                try {

                    var mytracking = SongTrack(timeItem)
                    mytracking.start()

                    mp!!.setDataSource(music)
                    mp!!.prepare()
                    seekBar.max = mp!!.duration
                    mp!!.start()
                } catch (ex: Exception) {
                }
                val adapter = SliderAdapterExample(this@MainActivity, imageItem, n)
                imageSlider.setSliderAdapter(adapter)

            }

            override fun onFailure(call: Call<List<ImagePost>>, t: Throwable) {
                code.setText(t.message)
            }
        })
        var flag:Boolean = true
        seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
            override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {

                for(i in timeItem) {
                    if (progress == i) {
                        imageSlider.currentPagePosition = imageSlider.currentPagePosition + 1
                        code.setText("condition met")
                    }
                }
            }

            override fun onStartTrackingTouch(seekBar: SeekBar?) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

            override fun onStopTrackingTouch(seekBar: SeekBar?) {
                TODO("not implemented") //To change body of created functions use File | Settings | File Templates.
            }

        })

        return imageItem
    }


    inner class SongTrack(timeItem: MutableList<Int>) : Thread() {
        override fun run() {
            while (true) {
                try {
                    sleep(100)
                } catch (ex: Exception) {
                }
                runOnUiThread {
                    if (mp != null) {
                        seekBar.progress = mp!!.currentPosition
                    }
                }
            }
        }
    }

}

1 Ответ

0 голосов
/ 12 февраля 2020

Нашли решение !! Я просто изменил код на это. Я думаю, что нужно время, чтобы проверить и изменить изображение, поэтому я предоставил ему интервал. Теперь он отвечает как требуется. Спасибо за попытку, ребята.

   seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
            override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) {
                    for (i in 0 until imageItem.size-1)
                    if (progress > timeItem[i] && progress < timeItem[i+1] && i<timeItem.size-1) {
                        imageSlider.currentPagePosition = i+1
                    }else if(progress>timeItem[timeItem.size-1]){
                        imageSlider.currentPagePosition =timeItem.size-1
                    }else if(progress==mp!!.duration){
                        seekBar!!.progress=0
                    }

            }
...