Scala で Android アプリ開発(Toast 編)
Toast 表示中に Toast を表示すると問題があるらしい*1ので、次のようなラッパーオブジェクトを用意する。
package は、準備編で用意したもの。
package com.github.cooldaemon.HelloWorld import _root_.android.content.Context import _root_.android.widget.Toast object AtomicToast { private[this] var toast: Toast = null def show(message: String)(implicit c: Context) = synchronized { if (toast != null) toast.cancel() toast = Toast.makeText(c, message, Toast.LENGTH_LONG) toast.show() } }
これを Activity から使うには、次のようにする。
package com.github.cooldaemon.HelloWorld // 省略 class MainActivity extends Activity with TypedActivity { implicit lazy val c: Context = this // 省略 // 何らかのメソッドの中で… AtomicToast.show("Selected Foo") // 省略 }
implicit で Context を渡すのが嫌な方は適宜修正してご利用ください。
*1:先に本記事のような対策をしてしまったので、困った経験がない