首页 > 解决方案 > 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
}

}

标签: androidandroid-studiokotlinandroid-alertdialog

解决方案


我使用以下方法解决了这个问题。

首先,我在我的 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
                })

推荐阅读