有没有更简洁的方法将监听器放入 Fragment 中?
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?)
方式。
但我想从其他 Fragment
(不是 Activity
)创建一个新的 FooFragment
实例。我可以使用这样的东西:
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
}
但是 FooFragment
中 onAttach(context: Context?)
方法中的这段代码会适得其反,因为我不希望 FooFragment 知道任何事情实例化它的类。此外,我希望它可以是 Fragment
或 Activity
。
最佳答案
您可以创建一个实现监听器的 baseActivity
class BaseFragmentActivity:AppCompatActivity(), FooFragment.Listener{}
然后扩展 class YouFragmentActivity : BaseFragmentActivity
然后它将确保每个 fragment 托管 Activity 都配备了容器,然后您可以获得作为 BaseFragmentActivity
您可以将 AppCompatActivity
替换为 BaseActivity
,其中 BaseActivity :AppCompatActivity
关于android - Fragment 与 Fragment(或 Activity)之间的监听器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52450281/