フラグメントに未来少年コナンのパタパタアニメみたいに、ランダムなポーズのアニメをTimer関数で入れ替える。
これでActivity入れ替えてもずーっとヘッダーでキャラが踊り続けるアニメができるはずだったが・・・
val handler =Handler()
val picAry = arrayOf(R.drawable.pic0,R.drawable.pic2~~)
var rndNum:Int =Math.random *10
timer(name = "patapataTimer", period = 1000) {
handler.post{
anime.setImageResource(picAry[rndNum])
}
}
だが、最初のActivityじゃ普通に動くのに、別のActivityに飛んだりするとすぐ落ちてしまう。
Runのメッセージをみると
java.lang.NullPointerException:
なんでーい、nullでるやんけー。もう少し読み進んでいくと
void android.widget.ImageView.setImageResource(int)
どうもactivityの切り替えタイミングとTimerのタイミングが悪いときイメージを拾い損ねてnullが出る模様。
で、思い出したのがこの人の投稿
https://qiita.com/TomiGie/items/0545e11e694eac7d88ec
var mp: MediaPlayer? = null
変数を宣言するときに一番後ろに"?"を入れ、null許容型にするというもの
Viewの後ろにも付けられるかな?と入れてみたら・・・
timer(name = "patapataTimer", period = 1000) {
handler.post{
anime?.setImageResource(picAry[picSuu])
}
}
YES。これで見事 落ちなくなりました。