1
指定我從片段運行GirlQualitiesChoiceDialog像下面拉姆達解僱DialogFragment:如何從主叫科特林
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
}
}
凡註明聽衆。我需要的是在我加載圖片後關閉對話框。 GirlQualitiesChoiceDialog.this.dismiss()不起作用。
有人可以告訴我,我該怎麼解僱GirlQualitiesChoiceDialog在這裏?假設我需要將對話回調以某種方式傳遞給lambda,但無法實現。
下面是我的對話框的代碼:
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()
}
}
和適配器
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) }
}
}
}
https://kotlinlang.org/docs/reference/this-expressions.html#qualified –
這不是我可以在這裏使用的。我只能做這個@ AddGirlFragment,但不能這樣@ GirlQualitiesChoiceDialog。 AddGirlFragment是我打開GirlQualitiesChoiceDialog的片段。但我需要解除GirlQualitiesChoiceDialog。所以我需要通過一些鏈接將GirlQualitiesChoiceDialog傳遞給setOnClickListener主體。 –