以下代码来源JDataBinding
作者微信公众号:ByteCode
- Activity里封装DataBinding
protected inline fun <reified T : ViewDataBinding> binding(
@LayoutRes resId: Int
): Lazy<T> = lazy {
DataBindingUtil.setContentView<T>(this, resId) }
- 使用
private val mBinding: ActivityMainBinding by binding(R.layout.activity_main)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mBinding.apply {
// TODO
}
}
- Fragment里封装
protected inline fun <reified T : ViewDataBinding> binding(
inflater: LayoutInflater,
@LayoutRes resId: Int,
container: ViewGroup?
): T = DataBindingUtil.inflate(inflater, resId, container, false)
- 使用
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
return binding<FragmentTestBinding>(
inflater,
R.layout.fragment_test, container
).apply {
viewModel = testViewModel
testAdapter = TestAdapter()
lifecycleOwner = this@FragmentTest
}.root
}
- ViewHolder中封装
inline fun <reified T : ViewDataBinding> viewHolderBinding(view: View): Lazy<T> = lazy {
requireNotNull(DataBindingUtil.bind<T>(view)) {
"cannot find the matched layout." }
}
- 使用
private val mBinding: RecycleItemAlbumBinding by viewHolderBinding(view)
override fun bindData(data: PokemonInfoModel.AlbumModel, position: Int) {
mBinding.apply {
album = data
executePendingBindings()
}
}