1
呼び出し側で指定されたラムダからDialogFragmentを解任する方法:リスナーを指定私は以下のようなフラグメントからGirlQualitiesChoiceDialogを実行しているKotlin
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を却下する方法はありますか?何らかの形でダイアログコールバックをラムダに渡す必要があるとしますが、どうやって実現できないとします。
以下は私のダイアログのコードです:
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本体に渡す必要があります。 –