android - 是否可以制作 2 个或更多 DataBindingComponent?
问题描述
我想问是否可以在android中制作2个或更多的DataBindingComponent类?因为我想在绑定中转义静态方法,所以我尝试使用 DataBindingComponent 的注入,但是我得到了Class 'AppDataBindingComponent' 的错误,必须要么声明为抽象,要么在 'DataBindingComponent' 中实现抽象方法 'getLoginViewDataBinding'因为这个错误我不能制作非静态的。
这是我遇到问题的课程
public class AppDataBindingComponent implements android.databinding.DataBindingComponent {
@Override
public RecyclerViewDataBinding getRecyclerViewDataBinding() {
return new RecyclerViewDataBinding();
}
}
第一个绑定类
public class RecyclerViewDataBinding {
@BindingAdapter({"app:adapter", "app:data"})
public void bind(RecyclerView recyclerView, DataAdapter adapter, List<DataModel> data) {
recyclerView.setAdapter(adapter);
adapter.updateData(data);
}
}
第二绑定类
public class LoginViewDataBinding {
@BindingAdapter({"validation", "errorMsg"})
public void setErrorEnable(TextInputLayout textInputLayout, StringRule stringRule,
final String errorMsg) {
Observable<CharSequence> textObservable = RxTextView.textChanges(
Objects.requireNonNull(textInputLayout.getEditText()));
compositeDisposable.add(textObservable
.map(charSequence -> {
......
})
.distinctUntilChanged()
.replay(1).refCount()
.subscribe());
}
}
在主类中,我调用 DataBindingComponent
public class MainActivity extends AppCompatActivity {
private DataViewModel dataViewModel;
private ActivityMainListMvvmBinding activityBinding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
bind();
}
private View bind() {
activityBinding = DataBindingUtil
.setContentView(this, R.layout.activity_main_list_mvvm, new AppDataBindingComponent());
dataViewModel = new DataViewModel();
activityBinding.setViewModel(dataViewModel);
return activityBinding.getRoot();
}
}
如果我把getLoginViewDataBinding问题解决了
public class AppDataBindingComponent implements android.databinding.DataBindingComponent {
@Override
public RecyclerViewDataBinding getRecyclerViewDataBinding() {
return new RecyclerViewDataBinding();
}
@Override
public LoginViewDataBinding getLoginViewDataBinding() {
return null;
}
}
我想要的答案是这样的:(这可能吗?)
public class AppDataBindingComponent implements android.databinding.DataBindingComponent {
@Override
public RecyclerViewDataBinding getRecyclerViewDataBinding() {
return new RecyclerViewDataBinding();
}
}
public class LoginDataBindingComponent implements android.databinding.DataBindingComponent {
@Override
public LoginViewDataBinding getLoginViewDataBinding() {
return null;
}
}
解决方案
那这个呢:
public class DataBindingComponent<T> implements android.databinding.DataBindingComponent {
private T activity;
public DataBindingComponent(T activity) {
this.activity = activity;
}
public LoginViewDataBinding getLoginViewDataBinding() {
return (LoginViewDataBinding) activity;
}
public RecyclerViewDataBinding getRecyclerViewDataBinding() {
return (RecyclerViewDataBinding) activity;
}
}
而不是在你的两个班级中创建:
new AppDataBindingComponent(this)
推荐阅读
- debugging - 为什么我可以在符号地址处中断,而不是指定地址?
- vba - 当电子邮件在 Outlook 中标记为完成时自动发送回复
- python - `if` 语句的冗余条件
- python - 如何在二维列表输入中获取字符类型?
- python - 是否可以在字符串 split() 方法中放置两个分隔符?
- delphi - 是否可以在 Delphi 中以编程方式修改命令行参数?
- spring-kafka - 如何在 Spring Kafka 生产者/消费者中自定义 Json(De)Serializer?(自我回应)
- javascript - JS从对象中的数组中找到匹配的对象
- sql - 在新表中选择相同的帐号
- database - 可以将 Vaadin 中的 JPA 存储库下载为 CSV 文件吗?