ダイアログを表示する

FloatingActionButtonをタップして、ダイアログを表示させます。

今回は左図の右下のボタンを押すと、右図のようにダイアログが表示されるアプリを作りました。
f:id:imoto-yuya-1234:20170823003940p:plain f:id:imoto-yuya-1234:20170823225747p:plain

ソースコード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が入るらしく、?をつけないとエラーになりました。