Search code examples
androidkotlinandroid-linearlayout

How can I make Android linearlayout refresh after addView some textview?


My res xml has a linearlayout and a button

    <LinearLayout
        android:id="@+id/linearLayout"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:layout_marginStart="32dp"
        android:layout_marginTop="32dp"
        android:layout_marginEnd="32dp"
        android:gravity="center_horizontal"
        android:orientation="horizontal"

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="TextView" />
    </LinearLayout>

    <Button
        android:id="@+id/btn_add_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="84dp"
        android:text="Button" />

click the button some char array added to linearLayout one by one

    val chars = "Hello".toCharArray() 

    btn_add_text.setOnClickListener {
        linearLayout.removeAllViews()
        chars.forEachIndexed { index, char ->
            val tv = Textview(this)
            tv.textSize = 36f
            tv.text = char
            tv.id = index
            linearLayout.addView(tv)
            linearLayout.invalidate()
    }

After forEachIndexed loop has finished linearLayout refreshed and can see [H][e][l][l][o] five textviews. But I want to make linearLayout refresh after each linearLayout.addView(tv).


Solution

  • If you want to see step by step you can try this:

    val handler = Handler()
    btn_add_text.setOnClickListener {
    linearLayout.removeAllViews()
    chars.forEachIndexed { index, char ->
          val tv = TextView(context!!)
          tv.textSize = 24f
          tv.text = char.toString()
          tv.id = index
          handler.postDelayed(Runnable {
              linearLayout.addView(tv)
          },500 * index.toLong())
        }
    }