【问题标题】:Is it possible to make 2 or more DataBindingComponent?是否可以制作 2 个或更多 DataBindingComponent?
【发布时间】:2018-09-21 11:07:24
【问题描述】:

我想问是否可以在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;
    }
}

【问题讨论】:

  • 你找到解决办法了吗?
  • 稍后不,我只是在 MVVM 方法和一些 MVC 方法之间使用混合编程来做......,因为当我看到任何解决方案时,我想要的这种答案都有解决方案。 ..
  • 我已经找到了解决方案。我会尽快发布的

标签: android android-databinding non-static


【解决方案1】:

这个呢:

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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-28
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多