Android-如何从子AlertDialog更新父AlertDialog

问题描述 投票:0回答:1

我正在构建一个日历应用程序,在其中单击日历日期将弹出一个AlertDialog,其中显示了在该特定日期添加的事件列表。

enter image description here

我正在使用自定义ArrayAdapter填充此对话框。我为每个项目添加了一个删除按钮。

目标是,当用户单击删除按钮时,出现第二个弹出窗口,并要求用户执行删除操作。

现在的问题是,当用户确认删除操作时,我希望关闭确认对话框(子对话框),并从父对话框中删除相应的项目。

enter image description here

我该如何实现?到目前为止,这是我的自定义适配器类。

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
}

}
android android-studio kotlin android-alertdialog
1个回答
0
投票

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

首先,我在我的适配器类中创建了一个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()

然后单击“删除”按钮,在Adapater类中单击:

.setPositiveButton("Delete", DialogInterface.OnClickListener { dialog, id ->
                    // delete event from DB                        
                    dialog.cancel()

                    var myVariable = _parentDialog
                    // Do stuff here
                })
© www.soinside.com 2019 - 2024. All rights reserved.