Android - Как обновить родительский AlertDialog из дочернего AlertDialog - PullRequest
0 голосов
/ 01 марта 2020

Я создаю приложение календаря, в котором при щелчке по календарной дате появится 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
}

}

1 Ответ

0 голосов
/ 01 марта 2020

Я решил эту проблему, используя следующий метод.

Сначала я создал переменную AlertDialog в своем классе Adapter.

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
                })
...