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.
- Kotlin: ¿Para qué se llaman los arguments lambda?
- Enlace de datos: el campo Observable con valor lambda no comstack
- Cuando los parameters lambda deben ser noinline en Kotlin?
- ¿Por qué no puedo usar lambda para la interfaz en kotlin?
- ¿Por qué la variable no se puede inicializar correctamente en la function en línea como en Java?
¿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) } } } }
- Tipo de function de Kotlin en su lugar interfaz funcional lambda
- Reescriba el código de Java en Kotlin utilizando la reference de function.
- Expresiones de kotlin lambda como parámetro opcional
- Kotin Cómo especificar la label de devolución cuando se incluye en Lambda
- Lambda en expresión de object de tipo múltiple
- Kotlin: cuándo y cómo se deben usar las expresiones Lambda
- Kotlin, Proguard y lambdas
- Tipo de function con receptor en Scala
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() } }
- Cómo implementar promedio ponderado exponencialmente decreciente
- RxJava2 Tal vez devuelva Observable vacío si no hay elemento