KotlinでDialogFragmentを使用する【Android】

Kotlinの正式サポートはまだ先の模様
多少フライングしても問題ないか





サンプルコード


ConfirmDialog.kt
import android.app.AlertDialog
import android.app.Dialog
import android.content.DialogInterface
import android.os.Bundle
import android.support.v4.app.DialogFragment

/**
 * Created by ninomae makoto.
 * @sample
 * var dialog = ConfirmDialog()
 * dialog.title = "タイトル"
 * dialog.msg = "メッセージ"
 * dialog.onOkClickListener = DialogInterface.OnClickListener { dialog, id ->
 *     Log.d( "tag", "ok clicked")
 * }
 * dialog.show( supportFragmentManager, "tag" )
 */
class ConfirmDialog : DialogFragment() {

    var title = "title"
    var msg = "msg"
    var okText = "OK"
    var cancelText = "cancel"
    /** ok押下時の挙動 */
    var onOkClickListener : DialogInterface.OnClickListener? = null
    /** cancel押下時の挙動 デフォルトでは何もしない */
    var onCancelClickListener : DialogInterface.OnClickListener? = DialogInterface.OnClickListener { _, _ -> }

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        // Use the Builder class for convenient dialog construction
        val builder = AlertDialog.Builder(activity)
        builder.setTitle(title)
                .setMessage(msg)
                .setPositiveButton(okText, onOkClickListener)
                .setNegativeButton(cancelText, onCancelClickListener)
        // Create the AlertDialog object and return it
        return builder.create()
    }

    override fun onPause() {
        super.onPause()
        // onPause でダイアログを閉じる場合
        dismiss()
    }
}



使用方法


コメントに書いてあるコードに従ってダイアログを出したい箇所に記述
一応文言やボタン押下時の挙動などは全て変更可能

var dialog = ConfirmDialog()
dialog.title = "タイトル"
dialog.msg = "メッセージ"
dialog.okText = "はい"
dialog.cancelText = "いいえ"
dialog.onOkClickListener = DialogInterface.OnClickListener { dialog, id ->
    Log.d(TAG, "ok clicked")
}
dialog.onCancelClickListener = DialogInterface.OnClickListener { dialog, id ->
    Log.d(TAG, "cancel clicked")
}
// supportFragmentManagerはAppCompatActivity(正確にはFragmentActivity)を継承したアクティビティで使用可
dialog.show(supportFragmentManager, "tag")


以下のように表示される(後ろのwebviewは気にしないこと)
Kotlin dialog


これだけの情報があれば後はどうにでもなるのではないかと
表示部分のカスタマイズについてはそのうち書くかも

2017年8月21日月曜日