1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TextViewの内容を動的に変更する方法

Posted at

自作androidアプリ Flexible Dice 
では、TextViewを動的に変更することでダイスロールを表現しています。その際に結構迷ったので備忘録的にメモします。
Google Play で手に入れよう

方法

色々調べた結果、以下のことがわかりました。
・画面更新の方法としてinvalidate()という命令文があるが、これはどうやら更新を予約するだけのものらしい。
・その場では更新されずinvalidate()のスレッドが終了した後(アイドル時)に画面の更新が行われる。
・そもそもinvalidate()はステータスを更新するほとんどの命令文(set○○()など)の際に暗黙に実行されているらしい。

結論としては、invalidate()は書く必要がなく、別スレッドでステータスを変更して元のスレッドに戻ればよいです。
そうすれば別スレッドが終了した時点で画面の更新が行われ、変更点が反映されます。

Thread{ }.start()で別スレッドを生成することができます。

例えば、下記のプログラムは Flexible Dice の左上に表示されているさいころの面と数を表すテキスト(1D10など)を動的に変更するスクリプトです。

Thread{
            activity?.runOnUiThread {
                val textViewDice = view.findViewById<TextView>(R.id.textView_dice)
                textViewDice.text = "DICE: " + number.toString() + "D" + face.toString()
            }
        }.start()

アイデア次第でいろいろできそうですね。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?