ダイアログ | Android デベロッパー | Android Developers
まともに書くと割と長いので、コピペ用にいまさら書いておく。
class ConfirmDialogFragment: DialogFragment() { | |
private lateinit var listener: ConfirmDialogListener | |
interface ConfirmDialogListener { | |
fun onPositiveClick(dialog: DialogFragment) | |
fun onNegativeClick(dialog: DialogFragment) | |
} | |
override fun onAttach(context: Context) { | |
super.onAttach(context) | |
try { | |
listener = context as ConfirmDialogListener | |
} catch (e: ClassCastException) { | |
throw ClassCastException("$context must implement NoticeDialogListener") | |
} | |
} | |
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { | |
val message = arguments?.getString(ARGS_MESSAGE) | |
return activity?.let { | |
AlertDialog.Builder(it) | |
.setMessage(message) | |
.setPositiveButton(android.R.string.ok) { _, _ -> | |
listener.onPositiveClick(this) | |
} | |
.setNegativeButton(android.R.string.cancel) { _, _ -> | |
listener.onNegativeClick(this) | |
} | |
.create() | |
} ?: throw IllegalStateException("Activity cannot be null") | |
} | |
companion object { | |
private const val ARGS_MESSAGE = "message" | |
fun newInstance(message: String): ConfirmDialogFragment { | |
val bundle = Bundle().apply { | |
putString(ARGS_MESSAGE, message) | |
} | |
return ConfirmDialogFragment().apply { | |
arguments = bundle | |
} | |
} | |
} | |
} |
class MainActivity : AppCompatActivity(), ConfirmDialogFragment.ConfirmDialogListener { | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
findViewById<Button>(R.id.button).setOnClickListener { | |
showDialog() | |
} | |
} | |
private fun showDialog() { | |
val message = "This is a message." | |
ConfirmDialogFragment.newInstance(message) | |
.show(supportFragmentManager, ConfirmDialogFragment::class.simpleName) | |
} | |
override fun onPositiveClick(dialog: DialogFragment) { | |
showToast("Positive clicked.") | |
} | |
override fun onNegativeClick(dialog: DialogFragment) { | |
showToast("Negative clicked.") | |
} | |
private fun showToast(text: String) { | |
Toast.makeText(this, text, Toast.LENGTH_SHORT).show() | |
} | |
} |
ダイアログの具の変更は、以下からコピペして、該当部分を書き換える。
【Android】パパっと使えるAlertDialog一覧 - Qiita
しかし、公式リファレンスて、読むの疲れない?
間違ってはないけど、何かが変じゃない?