/混淆规则
-keep class 包名.databinding.* {*;}
不使用反射
open class ViewActivity<VB : ViewBinding>(open val block:(LayoutInflater)->VB) : Activity(){
protected val binding by lazy { block(layoutInflater) }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
}
}
abstract class ViewFragment2<VB : ViewBinding>(val bindingBlock:(LayoutInflater, ViewGroup?,Boolean)->VB) : Fragment(){
private lateinit var _binding: VB
protected val binding get() = _binding
override fun getLayoutId() = 0
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
isLoaded = false
_binding = bindingBlock(inflater,container,false)
return _binding.root
}
}
class MainActivity2 : ViewActivity<ActivityMain2Binding>(ActivityMain2Binding::inflate){
}
class MyFragment:ViewFragment2<FragmentMyBinding>(FragmentMyBinding::inflate){
}
经过验证 如下
abstract class BaseFragment<VB : ViewBinding>(val bindingInflate:(LayoutInflater, ViewGroup?, Boolean)->VB) : Fragment() {
private lateinit var _binding: VB
protected val binding get() = _binding
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = bindingInflate(inflater, container, false)
// 初始化view
initViews(_binding.root)
return _binding.root
}
//子类有可能可以override,所以要open一下
open fun initViews(rootView: View) {}
}