如何从屏幕上删除以编程方式创建的文本视图?

问题描述 投票:0回答:1

在我的例程(generateView())中,我正在创建一组以约束布局(reglette)排列的文本视图(实际上是字母图块)。为了创建文本视图,我使用表达式“val childView = TextView(requireActivity())”,然后调整视图的不同参数。在片段的其他地方,我在这些创建的视图上设置了 onTouchListeners。这一切都很好。

问题是当我第二次调用例程时,我想删除第一组视图以用新视图替换它们。我尝试使用“set.clear(view.id)”,但视图保留在屏幕上,新设置会覆盖它们。

我做错了什么?这是例程的代码:

private fun generateView(tirage:CharArray) {
    val set = ConstraintSet()
    val parentLayout = binding.reglette
    var i = 0

    set.clone(parentLayout)
    for (v in parentLayout.children)
        set.clear(v.id)
    set.applyTo(parentLayout)

    listLettre.clear()

    val dummyLeft = TextView(requireActivity())
    listLettre.add(dummyLeft)
    listPos.add(i)
    listIndex.add(i++)

    for (lettre in tirage) {
        val childView = TextView(requireActivity())
        childView.id = View.generateViewId()
        childView.width = LARGEUR_LETTRE.toInt()
        childView.height = LARGEUR_LETTRE.toInt()
        childView.setBackgroundResource(R.drawable.lettre)
        childView.gravity = Gravity.CENTER
        childView.text = lettre.toString()
        childView.textSize = 34f
        childView.setTypeface(null, Typeface.BOLD)
        parentLayout.addView(childView, i - 1)
        listLettre.add(childView)
        listPos.add(i)
        listIndex.add(i++)
    }

    val dummyRight = TextView(requireActivity())
    listLettre.add(dummyRight)
    listPos.add(i)
    listIndex.add(i)

    val premL = listLettre.drop(1).first()

    val pad = (parentLayout.width - (tirage.size * LARGEUR_LETTRE.toInt())) / 2

    set.clone(parentLayout)
    set.connect(
        premL.id,
        ConstraintSet.START,
        ConstraintSet.PARENT_ID,
        ConstraintSet.START,
        pad
    )

    val windowedList = listLettre.drop(1).dropLast(1).windowed(2, 1, false)

    for (pair in windowedList)
        set.connect(
            pair.last().id,
            ConstraintSet.START,
            pair.first().id,
            ConstraintSet.END
        )

    set.applyTo(parentLayout)
}
kotlin textview constraintset
1个回答
0
投票

实际上 set.clear(view) 是从视图中删除所有约束,而不是视图本身。删除视图的命令是parentLayout.removeView(view),或者parentLayout.removeAllViews()将它们全部删除。

© www.soinside.com 2019 - 2024. All rights reserved.