ダイアログを表示する
FloatingActionButtonをタップして、ダイアログを表示させます。
今回は左図の右下のボタンを押すと、右図のようにダイアログが表示されるアプリを作りました。
ソースコードもgithubにあげました。
github.com
33a2a47c5afeed6aede84a0b790afa529f5f858d
まずはダイアログのクラスを作ります。ネットで探すとAlertDialogを使って〜という記事が多いですが、この記事ではDialogFragmentを継承して、下記のようにカスタムダイアログクラスを作成しました。
class AddListDialog: DialogFragment() { companion object { fun newInstance(): AddListDialog { val instance = AddListDialog() return instance } } override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = super.onCreateDialog(savedInstanceState) return dialog } override fun onCreateView(i: LayoutInflater, c: ViewGroup?, b: Bundle?): View? { val content: View = i.inflate(R.layout.add_list_dialog, c) return content } }
FloatingActionButtonから以下のメソッドを呼び出すことで、ダイアログを表示します。
private fun displayDialog() { val newFlagment = AddListDialog.newInstance() newFlagment.show(fragmentManager, "dialog") }
ダイアログ関連
ダイアログクラスのコンストラクタはnewInstanceメソッドを使う必要がありました。
ダイアログの動作はonCreateDialogメソッドとonCreateViewメソッドで定義します。
onCreateDialogメソッドでダイアログコンテナを作成して、onCreateViewメソッドでコンテンツを生成するとかっこいいみたいです。ただ今調べている感じだと、onCreateDialogメソッドで全部やった方が簡単そうです。
kotlin関連で学んだこと
・staticメソッドを実装するにはcompanion objectを使用すること
・nullが入る場合は?で明示すること
onCreateViewメソッドのViewGroupとBundleにはnullが入るらしく、?をつけないとエラーになりました。