[Kotlin] Toastを拡張関数を使って表示する

Androidでよく見るToastですが、大抵呼び出すときには第一引数、第二引数は固定になるかと思います。
今回はKotlinの拡張関数を使ってToastの呼び出しをよりシンプルにしてみたいと思います。

今回のサンプルアプリはこちらです。

実装は意外と単純です。今回はContextが属しているクラス上(例えばActivity)でToastを呼び出す拡張関数を実装します。
通常のToastを呼び出す実装は以下のように書くかと思います。

Toast.makeText(this, "表示するメッセージ", Toast.LENGTH_SHORT).show();

正直ちょっと冗長です。makeText()を呼び出してからshow()を呼び出すなんてちょっと非効率的です。
また、第一引数のコンテキストも省略できるなら死体ですし、Toastの表示時間も、大抵LENGTH_SHORTかLENGTH_LONGどちらかでアプリ内で統一されるものでしょう。固定にしてしまいたいものです。

そこで、拡張関数の出番です。Kotlinを使えば以下のようにシンプルにすることが可能です。
Extensions.kt

fun Context.showToast(text: CharSequence) =
    Toast.makeText(this, text, Toast.LENGTH_SHORT).show()

処理がシンプルなので、メソッドの{}を省略するなど色々簡略化してますが、見るべきところはContext.showToastとしているところです。
これによって、Contextクラスの拡張関数としてshowToast()メソッドが追加されました。
Toastの生成にmakeText()の第一引数でthisを渡していますが、これはContextクラスの拡張関数なので、contextが渡されるのでうまく動きます。

このメソッドを呼び出しているのが以下のコードです。
MainActivity.kt

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        showToast("テストメッセージ")
    }
}

このサンプルだとアプリを起動した瞬間にToastが表示されます。
メソッドの実装としては、表示したいテキストを渡すだけでOKになっています。楽ちんですね。

この拡張関数ですが、オーバーロードも可能です。同じメソッド名(showToast)で文字列リソース(R.string.xxxみたいなの)を引数に指定する以下のようなコードも一緒に定義することが可能です。
Extensions.kt

fun Context.showToast(@StringRes res: Int) =
    Toast.makeText(this, res, Toast.LENGTH_SHORT).show()

うまく拡張関数を追加してやって、Toastを書く手間を減らしてください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です