如何解决Android - 具有已实现方法和未知数据绑定类的抽象片段
我想实现一个片段继承,但我不知道如何处理 ViewDataBinding 生成的类。
示例:
fragment_a.xml
<layout ...>
<data>
<variable
name="viewModel"
type="...myViewModelA" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout...>
<include
android:id="@+id/form_section"
layout="@layout/form"
app:myData="@{myViewModelA.textValue}"
.../>
<MyWidget1
android:id="@+id/widget1"
.../>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
fragment_b.xml
<layout ...>
<data>
<variable
name="viewModel"
type="...myViewModelB" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout...>
<include
android:id="@+id/form_section"
layout="@layout/form"
app:myData="@{myViewModelB.textValue}"
.../>
<MyWidget2
android:id="@+id/widget2"
.../>
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
唯一的区别是使用的 viewModel 和小部件。
它们的 viewModel 继承自基础 ViewModel。
两个片段都通过包含使用“表单”布局。假设我们有这样的“表单”布局:
<layout ...>
<data>
<variable
name="myData"
type="String" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout...>
<TextView
android:id="@id/textview"
android:text="@{myData}
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
所以我想创建一个抽象的 BaseFragment
,它可以实现从“表单”布局中操作属性的方法,就像这样:
public abstract class BaseFragment<V extends BaseViewModel,B extends ViewDataBinding> extends Fragment {
protected V viewModel;
protected B binding;
// I skip the affectation code of the viewModel and binding objects using the generics
...
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
View v = ...
myMethod();
return v;
}
protected void myMethod() {
// some action on binding.formSection
}
}
正如我所说,目标是在抽象类中集中处理来自“表单”布局的属性的代码,并在扩展该抽象 BaseFragment 的子片段中实现来自特定片段的代码操作属性。
事情就是这样,你可以想象我无法通过抽象片段访问绑定对象的属性(绑定对象只是抽象类的 ViewDataBinding 对象)。
我需要一个接口来定义两个生成的类 FragmentABinding
和 FragmentBBinding
中可用的属性,这些属性在“表单”布局方面很常见。
有没有办法满足这种需求?我不知道的模式?我错过了什么?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。