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を書く手間を減らしてください。