每个使用View Binding的绑定类都有一个父类吗?

问题描述 投票:0回答:2

我正在使用 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 扩展一个类,并且该类需要是所有绑定类的父类。

所有生成的绑定类都有一个共同的父类?如果是这样那是什么?

android generics parent-child android-viewbinding
2个回答
6
投票

应该是

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
}

0
投票

对我来说效果很好!

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){
    
}
© www.soinside.com 2019 - 2024. All rights reserved.