У меня есть Activity, которая вызывает DialogFragment, как это:
private fun showDeleteDetailDialog(itemView: View, categoryId: String, detailId: String) {
val dialog = DeleteDetailDialogFragment.newInstance(categoryId, detailId)
dialog.show(this@DetailsActivity.fragmentManager, "DeleteDetailDialog")
}
И это код для моего DialogFragment (щелчок по кнопке PositiveButton удаляет элемент в базе данных Firebase):
class DeleteDetailDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
// Use the Builder class for convenient dialog construction
val categoryId = arguments.getString(ARG_CATEGORY_ID)
val detailId = arguments.getString(ARG_DETAIL_ID)
val builder = AlertDialog.Builder(activity)
builder.setMessage(R.string.delete_detail)
.setPositiveButton(R.string.delete, { dialog, id ->
deleteDetail(categoryId, detailId)
})
.setNegativeButton(R.string.cancel, { dialog, id ->
// User cancelled the dialog
})
// Create the AlertDialog object and return it
return builder.create()
}
private fun deleteDetail(categoryId: String, detailId: String) {
// get the detail reference for the specified category
val deleteRef = FirebaseDatabase.getInstance().getReference("details").child(categoryId).child(detailId)
// remove detail
deleteRef.removeValue()
// get the reference for the specified favorite, identified by detailId
val deleteFaveRef = FirebaseDatabase.getInstance().getReference("favorites").child(detailId)
// remove favorite
deleteFaveRef.removeValue()
}
companion object {
private val ARG_CATEGORY_ID = "category_id"
private val ARG_DETAIL_ID = "detail_id"
fun newInstance(categoryId: String, detailId: String): DeleteDetailDialogFragment {
val fragment = DeleteDetailDialogFragment()
val args = Bundle()
args.putString(ARG_CATEGORY_ID, categoryId)
args.putString(ARG_DETAIL_ID, detailId)
fragment.arguments = args
return fragment
}
}
}
Когда я вызываю диалог, появляется диалоговое окно. Когда я нажимаю кнопку Отмена (кнопка NegativeButton), диалоговое окно исчезает, как и ожидалось. Когда я нажимаю «Удалить» (PositiveButton), диалоговое окно снова исчезает, как и ожидалось.
НО, после успешного удаления, когда я снова вызываю диалог, нажатие кнопки Отмена не сразу закрывает диалоговое окно; вместо этого снова появляется диалоговое окно, которое исчезает только после второго нажатия кнопки «Удалить». Кажется, есть проблема с FragmentManager. Что мне здесь не хватает?