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: cuándo y cómo se deben usar las expresiones Lambda
  • ¿Cómo omitir los parameters lambda en Kotlin?
  • Cuando los parameters lambda deben ser noinline en Kotlin?
  • Reescriba el código de Java en Kotlin utilizando la reference de function.
  • Obtuvo NoClassDefFoundError al pasar el map de lambda
  • Expresiones de kotlin lambda como parámetro opcional
  • Kotlin genera class interna para lambda
  • Cómo escribir el generador HTML correcto en Kotlin
  • Cómo sobrecargar constructores en kotlin difiere en el tipo de retorno lambda
  • por qué kotlin lambda descomstackdo en código java es (Function0) null.INSTANCE
  • Función para expresión lambda