Есть ли лучший чистый способ поместить слушателя во фрагмент?
class FooFragment : Fragment() {
companion object {
private lateinit var listener: (Int) -> Unit
fun newInstance(listener: (Int) -> Unit): FooFragment {
Companion.listener = listener
return FooFragment()
}
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
return inflater.inflate(R.layout.fragment_foo, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
btn.setOnClickListener {
listener(1234)
}
}
}
Звонок такой аккуратный ...
FooFragment.newInstance {
// Do something
}
Я знаю, у этого кода проблемы из-завозможно, я потеряю слушателя при воссоздании Fragment
и использовании стандартного способа onAttach(context: Context?)
.
Но я хочу создать новый экземпляр FooFragment
из других Fragment
(не Activity
).Я мог бы использовать что-то вроде этого:
private var listener: Listener? = null
interface Listener {
fun onFooClicked()
}
override fun onAttach(context: Context?) {
super.onAttach(context)
// listener = context as Listener
fragmentManager?.findFragmentById(R.id.fFooParent) as Listener
}
Но этот кусок кода внутри onAttach(context: Context?)
метода внутри FooFragment
будет контрпродуктивным, потому что я не хочу, чтобы FooFragment знал что-либо о классекто его провоцируетБолее того, мне бы хотелось, чтобы это был Fragment
или Activity
.