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() } } 
  • La expresión lambda no se usa
  • Parámetros de Clase abstracta vs. Lambda
  • ¿Utilizas return dentro de una lambda?
  • Función para expresión lambda
  • Cómo sobrecargar constructores en kotlin difiere en el tipo de retorno lambda
  • "Lambda con receptor": ¿Qué es esta construcción de Kotlin?
  • ¿Cómo mejorar la syntax de kotlin lambda?
  • `break` y` continue` en `forEach` en Kotlin
  • Kotlin lambdas y tipo de inferencia
  • Inicializador de propiedad de múltiples líneas / complejo sin lambda
  • por qué kotlin lambda descomstackdo en código java es (Function0) null.INSTANCE