您如何遍历Rx可观察的ViewModel列表并膨胀视图

问题描述 投票:0回答:1

我需要遍历视图模型列表,对视图进行充气并将其添加到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,但是循环中的代码是我需要在列表项上执行的代码。

observable rx-java2 android-databinding android-viewmodel
1个回答
0
投票

我可以使用以下命令使它正常工作:

@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();
}
© www.soinside.com 2019 - 2024. All rights reserved.