Почему первый элемент GridView так себя ведет?
При клике должны запускаться отдельные таймеры в каждой клетке. Проблема с первым таймером, время в нем обновляется только если проскроллить, но только 1 раз.
Остальные работают нормально. В чем проблема? Почему сразу 8-9 раз срабатывает "log from adapter 1" и "log from adapter 3"?
Логи:
При нажатии на первый элемент:
2021-03-26 09:01:25.911 1515-1515/com.example.gridview D/log from clicklsnr 1: name: 1, value:00:00.0
2021-03-26 09:01:25.930 1515-1690/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.932 1515-1691/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.933 1515-1692/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.936 1515-1693/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.937 1515-1694/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.938 1515-1695/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.942 1515-1696/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.946 1515-1697/com.example.gridview D/log from adapter 1: name: 1, value: 00:00.0
2021-03-26 09:01:25.946 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:25.946 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:25.947 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:25.947 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:25.947 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:25.947 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:25.947 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:25.966 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:00
2021-03-26 09:01:26.944 1515-1697/com.example.gridview D/log from adapter 1: name: 1, value: 00:00
2021-03-26 09:01:26.945 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:01
2021-03-26 09:01:27.945 1515-1697/com.example.gridview D/log from adapter 1: name: 1, value: 00:01
2021-03-26 09:01:27.946 1515-1515/com.example.gridview D/log from adapter 3: name: 1, value:00:02
И дальше повторяется 1 3 1 3
При скролле вниз-вверх все повторяется
Если нажать на другой элемент то все нормально
2021-03-25 19:47:57.669 2715-2715/com.example.gridview D/log from clicklsnr 1: 2: 00:00.0
2021-03-25 19:47:58.652 2715-2715/com.example.gridview D/log from clicklsnr 1: 2: 00:00
2021-03-25 19:47:59.652 2715-2715/com.example.gridview D/log from clicklsnr 1: 2: 00:01
2021-03-25 19:48:00.654 2715-2715/com.example.gridview D/log from clicklsnr 1: 2: 00:02
2021-03-25 19:48:01.654 2715-2715/com.example.gridview D/log from clicklsnr 1: 2: 00:03
Если проскроллить
Код
2021-03-25 19:48:16.086 2715-2871/com.example.gridview D/log from adapter 1: 2: 00:00.0
2021-03-25 19:48:16.089 2715-2715/com.example.gridview D/log from adapter 3: 2: 00:18
2021-03-25 19:48:17.089 2715-2871/com.example.gridview D/log from adapter 1: 2: 00:18
2021-03-25 19:48:17.089 2715-2715/com.example.gridview D/log from adapter 3: 2: 00:19
2021-03-25 19:48:18.087 2715-2871/com.example.gridview D/log from adapter 1: 2: 00:19
2021-03-25 19:48:18.089 2715-2715/com.example.gridview D/log from adapter 3: 2: 00:20
2021-03-25 19:48:19.087 2715-2871/com.example.gridview D/log from adapter 1: 2: 00:20
2021-03-25 19:48:19.088 2715-2715/com.example.gridview D/log from adapter 3: 2: 00:21
class gridActivity : AppCompatActivity() {
// ........
inner class gridadapter(ctx: Context) : BaseAdapter(){
var ctx: Context? = ctx
override fun getView(pos: Int, convertView: View?, parent: ViewGroup?): View{
val view: View?
val inflater =LayoutInflater.from(ctx)
view = inflater.inflate(R.layout.cnter_item, null)
view!!.name.text=gridItems[pos].name
if(gridItems[pos].running && !gridItems[pos].finished && !gridItems[pos].tmpPaused){
gridItems[pos].timer.cancel()
gridItems[pos].timer=Timer()
gridItems[pos].timer.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
if (!gridItems[pos].finished && !gridItems[pos].tmpPaused) {
gridItems[pos].finishTimeStr = getTimeStr(gridItems[pos].startTime)
Log.d("log from adapter 1", "name: "+view.name.text.toString()+", value: "+ view.cnter.text.toString())
} else {
gridItems[pos].timer.cancel()
Log.d("log from adapter 2", "name: "+view.name.text.toString()+", value: "+ view.cnter.text.toString())
}
hndUpdateTime.post {
run {
view.cnter.text = gridItems[pos].finishTimeStr
Log.d("log from adapter 3", "name: "+view.name.text.toString()+", value: "+ view.cnter.text.toString())
if (gridItems[pos].finished) {
view.itemContainer.setBackgroundColor(RED)
Log.d("log from adapter 4","name: "+view.name.text.toString()+", value: "+ view.cnter.text.toString())
}
}
}
}
}, 0, interval)
}
view.setOnClickListener{
if(!gridItems[pos].running && !gridItems[pos].finished){
gridItems[pos].running=true
gridItems[pos].timer=Timer()
gridItems[pos].startTime=System.currentTimeMillis()
gridItems[pos].timer.scheduleAtFixedRate(object : TimerTask() {
override fun run() {
if(!gridItems[pos].finished && !gridItems[pos].tmpPaused){
gridItems[pos].finishTimeStr=getTimeStr(gridItems[pos].startTime)
hndUpdateTime.post { run {
Log.d("log from clicklsnr 1","name: "+view.name.text.toString()+", value: "+ view.cnter.text.toString())
view.cnter.text=gridItems[pos].finishTimeStr
}}
}
if(gridItems[pos].finished){
gridItems[pos].timer.cancel()
hndUpdateTime.post { run {
view.itemContainer.setBackgroundColor(RED)
}}
}
}
}, 0, interval)
}
}
}
}
// ........
}