cómo descartar DialogFragment de lambda especificado en el llamador Kotlin

Estoy ejecutando el GirlQualitiesChoiceDialog de fragment como a continuación:

girlType.setOnClickListener { GirlQualitiesChoiceDialog.show(activity, InitialDataSet.instance.QUALITY_TYPE_COLOR){ Picasso.with(context).load(it.resId).into(colorTypeImage as ImageView) //GirlQualitiesChoiceDialog.this.dismiss() - need to dismiss the created dialog } } 

Donde especificar el oyente. Lo que necesito es descartar el dialog después de cargar la image. GirlQualitiesChoiceDialog.this.dismiss () no está funcionando.

¿Alguien puede aconsejarme por favor cómo puedo descartar GirlQualitiesChoiceDialog aquí? Supongamos que necesitaría pasar la callback de algún modo a lambda, pero no puedo darme count cómo.

Debajo está el código de mi Diálogo:

 class GirlQualitiesChoiceDialog : DialogFragment() { companion object { val ARG_QUALITY_TYPE = "ARG_QUALITY_TYPE" private lateinit var itemClickInterface: (Quality) -> Unit fun show(activity: Activity, qualityType: Int, itemClick: (Quality) -> Unit) { itemClickInterface = itemClick GirlQualitiesChoiceDialog().apply { arguments = Bundle().apply { putInt(ARG_QUALITY_TYPE, qualityType) } }.show((activity as AppCompatActivity).supportFragmentManager, TAG) } } private lateinit var adapter: QualitiesAdapter override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val choiceDialogView = activity.getLayoutInflater().inflate(horizontal_list_view, null) val layoutManager = LinearLayoutManager(activity, LinearLayoutManager.HORIZONTAL, false) choiceDialogView.horisontalCardsRecyclerView.setLayoutManager(layoutManager) with(ItemClickSupport.addTo(choiceDialogView.horisontalCardsRecyclerView)) { setOnItemLongClickListener { recyclerView, position, v -> val quality = v.getTag() as Quality; dismiss() true } } var qualityType = arguments.getInt(ARG_QUALITY_TYPE) var title = -1 when (qualityType) { InitialDataSet.instance.QUALITY_TYPE_COLOR -> { title = R.string.choose_color_type adapter = QualitiesAdapter(InitialDataSet.instance.qualities, itemClickInterface) } } choiceDialogView.horisontalCardsRecyclerView.adapter = adapter return AlertDialog.Builder(activity) .setTitle(title) .setView(choiceDialogView) .create() } } 

y adaptador

 class QualitiesAdapter(val qualities: List<Quality>, val itemClick: (Quality) -> Unit) : RecyclerView.Adapter<QualitiesAdapter.ViewHolder>() { override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.selection_card, parent, false) return ViewHolder(view, itemClick) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.bindForecast(qualities[position]) } override fun getItemCount() = qualities.size class ViewHolder(view: View, val itemClick: (Quality) -> Unit) : RecyclerView.ViewHolder(view) { fun bindForecast(quality: Quality) { with(quality) { Picasso.with(itemView.context).load(resId).into(itemView.selectionImage) (itemView as BaseCardView).setStatusLabel(desc) itemView.setTag(quality) itemView.setOnClickListener { itemClick(this) } } } } 

Te recomiendo que devuelvas la instancia del dialog de tu método de show y luego puedes descartarlo en la callback.

Cambiar muestra en GirlQualitiesChoiceDialog algo así como lo siguiente:

  fun show(activity: Activity, qualityType: Int, itemClick: (Quality) -> Unit): GirlQualitiesChoiceDialog { itemClickInterface = itemClick val dialog = GirlQualitiesChoiceDialog().apply { arguments = Bundle().apply { putInt(ARG_QUALITY_TYPE, qualityType) } } dialog.show((activity as AppCompatActivity).supportFragmentManager, TAG) return dialog } 

Aquí está el código del oyente:

 girlType.setOnClickListener { val dialog = GirlQualitiesChoiceDialog.show(activity, InitialDataSet.instance.QUALITY_TYPE_COLOR) { Picasso.with(context).load(it.resId).into(colorTypeImage as ImageView) dialog.dismiss() } } 
  • Kotlin filter lambda array usando el índice de iteración
  • Implementación de interfaz de retorno con Kotlin y lambda
  • Poniendo un lambda genérico en un map
  • Kotlin: ambigüedad de resolución de sobrecarga lambda y sobrecarga
  • ¿Puedo transformar cadena en expresión de plantilla o expresión lambda en kotlin?
  • Kotlin - Lista dentro de un filter de list
  • Referencia al método de una instancia particular en Kotlin
  • ¿Por qué la variable no se puede inicializar correctamente en la function en línea como en Java?
  • ¿Utilizas return dentro de una lambda?
  • Obtuvo NoClassDefFoundError al pasar el map de lambda
  • Tienda lambda en una variable en kotlin