我需要遍历视图模型列表,对视图进行充气并将其添加到linearLayout中。非常感谢您提供有关执行此操作的任何提示。
@BindingAdapter({"items", "provider"})
public static void populateLinearLayout(LinearLayout layout, @Nullable Observable<List<ViewModel>> items, @Nullable int provider) {
if (items == null) {
return;
}
ViewDataBinding viewDataBinding;
layout.removeAllViews();
for (ViewModel vm :
items) {
viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(layout.getContext()), provider, layout, false);
viewDataBinding.setVariable(BR.viewModel, vm);
viewDataBinding.executePendingBindings();
layout.addView(viewDataBinding.getRoot());
}
layout.invalidate();
}
这不起作用,因为我无法在Observable上使用forEach,但是循环中的代码是我需要在列表项上执行的代码。
我可以使用以下命令使它正常工作:
@BindingAdapter({"items", "provider"})
public static void populateLinearLayout(LinearLayout layout, @Nullable Observable<List<ViewModel>> items, int provider) {
if (items == null) {
return;
}
layout.removeAllViews();
items.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.forEach(item -> {
for (ViewModel viewModel:
item) {
ViewDataBinding viewDataBinding = DataBindingUtil.inflate(LayoutInflater.from(layout.getContext()), provider, layout, false);
viewDataBinding.setVariable(BR.viewModel, viewModel);
viewDataBinding.executePendingBindings();
layout.addView(viewDataBinding.getRoot());
}
});
layout.invalidate();
}