トースト
Toastオブジェクトのインスタンス化
定義
Toast.makeText(context: Context, text: CharSequence, duration: Int)
// パラメータ
// context: トーストを表示させるアクティビティオブジェクト(=Activityインスタンス)
// text: トーストで表示する文字列
// duration: トーストを表示する時間
サンプルコード
val show = "test"
val toast = Toast.makeText(this@MainActivity, show, Toast.LENGTH_LONG)
説明
Contextクラス
Activityクラスの親クラス。
context
thisは自身のインスタンスを指すが、コンパイルエラーや誤作動を避けるためにthis@アクティビティクラス名という記述を行う。
また、Contextクラスが保持するapplicationContextプロパティも利用できるが、コンテキストの指定が不明瞭になるため非推奨。
duration
トーストを表示する時間を、Toastクラスの定数を使って指定する。
Toastクラスの定数は以下の2種類。
| 定数 | 内容 |
|---|---|
Toast.LENGTH_LONG |
長い |
Toast.LENGTH_SHORT |
短い |
Toastオブジェクトの表示
サンプルコード
toast.show()
リスト形式のビュー(ListView, Spinner)のリスナクラス
class MainActivity: AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
...
}
// ListViewのItemをタップした場合のリスナクラス(リスナ)
// AdapterView: ListView, Spinnerの親クラス
// OnItemClickListener: "タップ"イベントを検知するAdapterViewのメンバインタフェース
private inner class ListItemClickListener: AdapterView.OnItemClickListener {
// タップ時の処理(イベントハンドラ)
// view: (タップされた)ビュー(=ListViewのItem(=TextView))
// position: (タップされた)ItemのIndex
// id: (SimpleCursorAdapterを使用する場合)DBの主キー
// (それ以外の場合)positionと同じ値
override fun onItemClick(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
// ListViewのItem(TextView)の値をIndex番号から取得, String型に変換
// parent: AdapterView
// getItemAtPosition(): 指定したIndexのtext値を取得(返り値はAny型)
val item = parent?.getItemAtPosition(position) as String
// トーストで表示する文字列
val show = "you chose: " + item
// Toast.makeText(context:text:duration:): Toastオブジェクトのインスタンス化
// context: トーストを表示させるアクティビティオブジェクト(=Activityインスタンス)
// text: トーストで表示する文字列
// duration: トーストを表示する時間
val toast = Toast.makeText(this@MainActivity, show, Toast.LENGTH_LONG)
// トーストの表示
toast.show()
}
}
リスナのセット
セッタがリスナプロパティのセッタでない場合
参考: 研修1日目
setOnClickListener()メソッドは、onClickListenerプロパティのセッタではないため、
onClickListenerプロパティにリスナを直接代入(=アクセス)し、リスナとして定義することができない。
// リスナとするオブジェクトの定義
val btClick = findViewById<Button>(R.id.btClick)
// リスナクラスのインスタンス化(実体化)
val listener = HelloListener()
// オブジェクトをリスナとして設定
btClick.setOnClickListener(listener)
セッタがリスナプロパティのセッタである場合
setOnItemClickListener()メソッドは、onItemClickListenerプロパティのセッタであるため、
onItemClickListenerプロパティにリスナを直接代入することで、自動的にセッタを呼び出し、リスナとして定義することができる。
// リスナとするオブジェクトの定義
val lvMenu = findViewById<ListView>(R.id.lvMenu)
// 本来はこっち
// リスナクラスのインスタンス化(実体化)
val listener = ListItemClickListener()
// オブジェクトをリスナとして設定
lvMenu.setOnItemClickListener(listener)
// 上記の条件を満たす場合(直接リスナプロパティにリスナをセット)
lvMenu.onItemClickListener = ListItemClickListener()
使い分け
上記条件に該当する場合は、Android StudioがUse property access syntaxとプロパティへのアクセスで記述するように提案してくれるので、最初から意図的にセッタを呼び出してリスナを定義する。