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:先に本記事のような対策をしてしまったので、困った経験がない