如何在Kotlin中委派范围



我有一个方法onBind(),我想在binding的范围内使用,有办法实现吗?

目前,我在BaseBindableFragment中有一个变量("binding:T"(和一个抽象函数onBind(),在我的实现中,我使用with(binding){}来确定onBind()的范围。我想避免使用with(binding),并使其在实现中获得onBind() { this: T -> }

我的抽象类

abstract class BaseBindableFragment<T : ViewDataBinding> : Fragment() {
protected lateinit var binding: T
private set
protected abstract val layout: Int
@LayoutRes get
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
binding = DataBindingUtil.inflate(inflater, layout, container, false)
// Wrap with(binding){onBind()} in a way that `onBind` executes with `binding` as `this`
onBind()
return binding.root
}
protected abstract fun onBind()
}

然后在我的实现中

override fun onBind() = with(binding) {  // <- I want to avoid this "= with(binding)" line
lifecycleOwner = viewLifecycleOwner
viewModel = myViewModel
}
protected abstract fun T.onBind()

binding = DataBindingUtil.inflate(inflater, layout, container, false)
binding.onBind()
return binding.root

实现成为

override protected fun T.onBind() {
lifecycleOwner = viewLifecycleOwner
viewModel = myViewModel
}

(例如MyBinding.onBind(),如果您的课程扩展了BaseBindableFragment<MyBinding>(

最新更新