1

我正在使用 Android 视图绑定(在 Android Studio 3.6 上)。我正在使用自动生成的类来膨胀 ViewHolder,比如

public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    ViewHolderShowAllProductsBinding binding = ViewHolderShowAllProductsBinding.inflate(LayoutInflater.from(parent.getContext()));
    return new MyViewHolder(binding);
}

MyViewHolder 看起来像这样:

class MyViewHolder extends RecyclerView.ViewHolder {
    public ViewHolderShowAllProductsBinding binding;

    public MyViewHolder(ViewHolderShowAllProductsBinding binding) {
        super(binding.getRoot());
        this.binding = binding;
    }
}

但这会产生如下 UI 错误: 由于 Android 绑定导致的 UI 错误

当使用正常的通货膨胀和 findViewById 时,它会产生正确的结果: 使用 findViewById apoach 更正 Ui

由于我在有错误的地方使用了 ConstraintLayout 和 0dp,这让我相信 View Binding 膨胀不适用于 ConstraintLayout 的 0dp。

我对么?解决方法是什么?

4

2 回答 2

0

在 onCreateViewHolder 方法中以这种方式使用 DatabindingUtils

DataBindingUtil.inflate(LayoutInflater.from(viewGroup.getContext()),
                    R.layout.your_layout, viewGroup, false);
于 2020-03-27T21:44:07.957 回答
0

我刚刚设法解决它,您应该尝试inflate使用 3 个参数调用以传递父级。而不是这个

public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    ViewHolderShowAllProductsBinding binding = ViewHolderShowAllProductsBinding.inflate(LayoutInflater.from(parent.getContext()));
    return new MyViewHolder(binding);
}

试试这个:

public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    ViewHolderShowAllProductsBinding binding = ViewHolderShowAllProductsBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false); // change this
    return new MyViewHolder(binding);
}
于 2020-11-26T17:02:27.637 回答