Как можно задать индекс создаваемому ImageView?

У меня есть контейнер FrameLayout, на который я создаю ImageView раз в секунду в случайном положении на экране через container.addView(myImage). Через некоторое время я хочу удалить ImageView который был создан к примеру на третьей секунде.

var index = 0

fun drawImagePerSecond() {
        index++
        val container: FrameLayout = findViewById(R.id.container)
        val myImage: ImageView = findViewById(R.id.myImage)
        myImage.id = index
        
        runOnUiThread {
            container.addView(myImage)
        }
    }

fun removeImage(index: Int) {
        val container: FrameLayout = findViewById(R.id.container)
        runOnUiThread {
            container.removeView(findViewById(index))
        }
    }

Каким образом можно создавать imageView с индексом, чтобы к примеру потом удалить imageView с выбранным индексом?


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

Автор решения: Vind Iskald
val idsBySec: HashMap<Int,Int> = hashMapOf()          // sec to viewId

var sec = 0
fun drawImagePerSecond() {
        sec++
        val container: FrameLayout = findViewById(R.id.container)

            // Для фрагмента:
            val myImage: ImageView = ImageView(requireContext())
        
            // Для активити:
            val myImage: ImageView = ImageView(this)

        val newId = View.generateViewId()
        myImage.id = newId
        idsBySec[sec] = newId
        runOnUiThread {
            container.addView(myImage)
        }
    }

fun removeImage(sec: Int) {
        val container: FrameLayout = findViewById(R.id.container)
        idsBySec[sec]?.let { viewId ->
             runOnUiThread {
                  container.removeView(findViewById(viewId))
             }
        }
    }

→ Ссылка