Почему первый элемент 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)
                }
            }

        }
    }

    // ........

}

Ответы (0 шт):