我开始使用 ViewBinding。在搜索了一些示例或建议后,如何将 ViewBinding 与抽象基类一起使用,该抽象基类应该处理预期出现在每个孩子的布局中的视图的相同逻辑,我最终在这里发布了这个问题。
场景:
我有一个基类public abstract class BaseFragment。有多个 Fragment 扩展了这个基类。这些 Fragment 具有从基类实现(使用 "old" findViewById())处理的公共视图。例如,每个片段的布局都应该包含一个 ID 为 text_title 的 TextView。这是从BaseFragment's处理它的方式onViewCreated():
TextView title = view.findViewById(R.id.text_title);
// Do something with the view from the base class
Run Code Online (Sandbox Code Playgroud)
现在 ViewBinding-API 为每个子片段生成绑定类。我可以使用绑定引用视图。但是我不能使用基类中的具体绑定。即使在基类中引入泛型,也有太多类型的片段绑定,我现在放弃了这个解决方案。
从抽象基类处理绑定视图的推荐方法是什么?是否有最佳实践?没有在 API 中找到内置机制来优雅地处理这种情况。
当期望子片段包含公共视图时,我可以提供抽象方法,这些方法从片段的具体绑定中返回视图,并使它们可以从基类访问。(例如protected abstract TextView getTitleView();)。但这是一个优势而不是使用findViewById()吗?你怎么认为?任何其他(更好的)解决方案?请让我们开始一些讨论。
我正在使用 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
}
Run Code Online (Sandbox Code Playgroud)
为了使其工作,我需要让 T 扩展一个类,并且该类需要是所有绑定类的父类。
所有生成的绑定类都有一个共同的父类?如果是这样那是什么?