我正在使用 ViewBinding,我正在尝试减少创建 Fragment 的代码,该 Fragment 是一个抽象类并包含以下代码:
abstract class MyFragment<T> : Fragment() {
private var binding: T? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = getBinding()
return binding.root
}
abstract fun getBinding(): T
}
为了使其工作,我需要让 T 扩展一个类,并且该类需要是所有绑定类的父类。
所有生成的绑定类都有一个共同的父类?如果是这样那是什么?
应该是
ViewBinding
。代码片段应该适用于基本片段。
abstract class BaseFragment<V: ViewBinding> : Fragment(){
private var binding: V? = null
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = getBinding()
return binding?.root
}
abstract fun getBinding(): V
}
对我来说效果很好!
typealias Inflate<T> = (LayoutInflater, ViewGroup?, Boolean) -> T
abstract class BaseFragment<VB : ViewBinding>(private val inflate: Inflate<VB>) : Fragment() {
private var _binding: VB? = null
val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
_binding = inflate.invoke(inflater, container, false)
return binding.root
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
class ChildFragment : BaseFragment<FragmentChildBinding>(FragmentChildBinding::inflate){
}