android - Android - 如何从子 AlertDialog 更新父 AlertDialog
问题描述
我正在构建一个日历应用程序,单击日历日期将弹出一个AlertDialog
显示在该特定日期添加的事件列表。
我正在使用自定义填充此对话框ArrayAdapter
。我为每个项目添加了一个删除按钮。
目标是,当用户单击删除按钮时,会出现一个辅助弹出窗口,并要求用户遵守删除操作。
现在的问题是,当用户确认删除操作时,我希望确认对话框(子对话框)关闭,并从父对话框中删除相应的项目。
我怎样才能做到这一点?到目前为止,这是我的自定义适配器类。
class EventDialogAdapter(
context: Context,
events: Array<EventItem>
) : ArrayAdapter<EventItem>(context, 0, events) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = convertView ?: LayoutInflater.from(parent.context)
.inflate(R.layout.item_dialog_event, parent, false)
val eventItem = getItem(position)
if (eventItem != null) {
view.findViewById<View>(R.id.colorView).setBackgroundColor(eventItem.color)
view.findViewById<TextView>(R.id.eventNameView).text = eventItem.eventName
// set close buton
val closeButton : ImageButton = view.findViewById<ImageButton>(R.id.btnDeleteEvent)
closeButton.setOnClickListener {
val dialogBuilder = AlertDialog.Builder(context)
// set message of alert dialog
dialogBuilder.setMessage(eventItem.eventName + ":\n\nAre you sure to delete this event?")
// if the dialog is cancelable
.setCancelable(false)
// positive button text and action
.setPositiveButton("Delete", DialogInterface.OnClickListener { dialog, id ->
//======================================================================
// DO something here to update the Parent dialog ????????
//======================================================================
})
// negative button text and action
.setNegativeButton("Cancel", DialogInterface.OnClickListener {
dialog, id -> dialog.cancel()
})
// create dialog box
val alert = dialogBuilder.create()
// set title for alert dialog box
alert.setTitle("Confirm")
// show alert dialog
alert.show()
}
}
return view
}
}
解决方案
我使用以下方法解决了这个问题。
首先,我在我的 Adapter 类中创建了一个 AlertDialog 变量。
lateinit var _parentDialog : androidx.appcompat.app.AlertDialog
fun SetParentDialog(parentDialog : androidx.appcompat.app.AlertDialog )
{
_parentDialog = parentDialog
}
然后在构建父对话框时,我像这样传递了父对话框的引用。
val builder = AlertDialog.Builder(requireContext())
val adapter = EventDialogAdapter(requireContext(), eventItems)
builder.setAdapter(adapter, null)
val dialog = builder.create()
adapter.SetParentDialog(dialog)
dialog.show()
然后在删除按钮上单击适配器类:
.setPositiveButton("Delete", DialogInterface.OnClickListener { dialog, id ->
// delete event from DB
dialog.cancel()
var myVariable = _parentDialog
// Do stuff here
})