Android ';如果条件为';在seekbar中,onprogresschanged未执行
当seekBar侦听器中的“If”条件满足时,我想更改textview上的图像和文本,但该条件中的代码不会执行。 我尝试了不同的方法,比如我放置了硬编码的值,比如if(progress==100){},但即使这样也不会执行。请指导我现在该做什么。提前谢谢Android ';如果条件为';在seekbar中,onprogresschanged未执行,android,kotlin,seekbar,Android,Kotlin,Seekbar,当seekBar侦听器中的“If”条件满足时,我想更改textview上的图像和文本,但该条件中的代码不会执行。 我尝试了不同的方法,比如我放置了硬编码的值,比如if(progress==100){},但即使这样也不会执行。请指导我现在该做什么。提前谢谢 open class MainActivity : AppCompatActivity() { var imageItem: MutableList<String> = mutableListOf<String>
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
}
}
}
}
}
}
openclass MainActivity:AppCompatActivity(){
var-imageItem:MutableList=mutableListOf()
var timeItem:MutableList=mutableListOf()
//var slideTime:MutableList=mutableListOf(2000,10000,11000)
var music:String?=null
var gson:gson=GsonBuilder().create()
变量mp:MediaPlayer?=null
val改造=
改装.Builder()
.baseUrl(“http://165.22.214.137:8002/")
.addConverterFactory(GsonConverterFactory.create(gson))
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build()
val jsonPlaceHolderAPI=reformation.create(
JSONAPI::class.java
)
重写创建时的乐趣(savedInstanceState:Bundle?){
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
添加(R.drawable.ic_launcher_background.toString())
imageSlider.SetSliderTransformation(SliderImation.FADETRANSFORMATION);
getPosts()
imageSlider.setOnIndicatorClickListener(DrawController.ClickListener{position->
imageSlider.setCurrentPagePosition(
位置
)
})
button.setOnClickListener{
如果(mp!!.isplay){
mp!!.pause()
按钮。设置背景资源(R.可绘制。ic\播放\圆圈\轮廓\黑色\ 24dp)
}否则{
mp!!.start()
按钮。设置背景资源(右可绘制。ic\暂停\圆圈\轮廓\黑色\ 24dp)
}
}
}
//获取Json数据
fun getPosts():列表{
val call=jsonPlaceHolderAPI.imagesDetails
var n=0
排队(对象:Callback{
覆盖响应(
呼叫:呼叫,,
答复:答复
) {
如果(!response.issucessful){
code.setText(“代码:+response.message())
}
val posts=response.body()!!
用于(以职位为单位的职位){
var content=“”
n=post.media.size
对于(从0到n-1的i){
imageItem.add(post.media[i].image)
timeItem.add(post.media[i].ms)
}
音乐=后期音频
}
mp=MediaPlayer()
试一试{
var mytracking=SongTrack(时间项)
mytracking.start()
mp!!.setDataSource(音乐)
准备
seekBar.max=mp!!.duration
mp!!.start()
}捕获(例如:异常){
}
val适配器=滑块适配器示例(this@MainActivity,imageItem,n)
imageSlider.setSliderAdapter(适配器)
}
覆盖失效时的乐趣(调用:调用,t:可丢弃){
code.setText(t.message)
}
})
变量标志:布尔值=true
seekBar.setonseekbarchaneglistener(对象:seekBar.onseekbarchaneglistener{
重写已更改的进程(seekBar:seekBar?,进程:Int,fromUser:Boolean){
对于(i在时间项中){
如果(进度==i){
imageSlider.currentPagePosition=imageSlider.currentPagePosition+1
代码.setText(“满足条件”)
}
}
}
在开始跟踪触摸时覆盖乐趣(seekBar:seekBar?){
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
覆盖顶部跟踪触摸屏(seekBar:seekBar?){
TODO(“未实现”)//要更改已创建函数的主体,请使用文件|设置|文件模板。
}
})
返回图像项
}
内部类歌曲曲目(timeItem:MutableList):Thread(){
覆盖趣味跑(){
while(true){
试一试{
睡眠(100)
}捕获(例如:异常){
}
runOnUiThread{
如果(mp!=null){
seekBar.progress=mp!!.currentPosition
}
}
}
}
}
}
找到了解决方案!!我刚把代码改成这个。我认为检查和更改图像需要时间,所以我提供了一个间隔。现在它正在按要求作出反应。谢谢你们的努力
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
}
}
seekBar.setonseekbarchaneglistener(对象:seekBar.onseekbarchaneglistener{
重写已更改的进程(seekBar:seekBar?,进程:Int,fromUser:Boolean){
用于(i在0中,直到imageItem.size-1)
if(进度>时间项[i]&进度<时间项[i+1]&itimeItem[timeItem.size-1]){
imageSlider.currentPagePosition=timeItem.size-1
}否则如果(进度==mp!!.duration){
seekBar!!.progress=0
}
}
检查您的时间项数组大小,如果它大于或不大于0。@NehalGodhasara我通过在textView上打印其值来检查它,它有11个元素。我通过单击按钮尝试了相同的代码“imageSlider.currentPagePosition=imageSlider.currentPagePosition+1”,它可以工作,但在if条件下不工作。