recyclerview项宽度不填充屏幕宽度

waxmsbnn  于 2021-06-27  发布在  Java
关注(0)|答案(1)|浏览(381)

我在填一份表格 RecyclerView 将自定义视图作为列表项, ListItem ,从 onCreateViewHolder 功能。
问题是,列表项视图的宽度并没有填充recyclerview(父级)宽度,但实际上它 Package 了内容的宽度(设置为匹配父级而不是 Package 内容)。
我猜既然我是以编程方式创建视图,它就不知道它的父级。
这里是我创建 ListItem 在适配器中:

@NonNull
@Override
public ListItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return new ListItemHolder(new ListItem(parent.getContext()));
}

以及 ListItem ```
public class ListItem extends LinearLayout {

private ListItemBinding binding;
private final Context mContext;

public ListItem(Context context) {
    super(context);
    mContext = context;
    setUp();
}

public ListItem(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    setUp();

    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ListItem, 0, 0);
    setBigText(a.getString(R.styleable.ListItem_bigText));
    setSmallText(a.getString(R.styleable.ListItem_smallText));
    setImageDrawable(a.getDrawable(R.styleable.ListItem_src));
    setHeaderText(a.getString(R.styleable.ListItem_header));
    showHeader(binding.listItemHeaderText.getText() != null);
    a.recycle();
}

public void setUp() {
    binding = ListItemBinding.inflate(LayoutInflater.from(mContext), this, true);
    setClickable(true);
    setFocusable(true);
}

public void setBigText(@Nullable String text) {
    binding.listItemBigText.setText(text == null ? "" : text);
}

.
.
.
.
.

}

我尝试将父级作为参数传递给 `ListItem` 构造函数,但它引发了一个与上下文相关的错误。
我怎样给汽车充气 `ListItem` 同时保持它作为一个独立的类,并让它填补它的父宽度?
我可以创建一个列表项的布局,并从中的布局充气 `onCreateViewHolder` 而不是从一个自定义视图类膨胀,但我想让它分离和可重用。
解决方案
多亏了@zain,他的解决方案只是通过view类设置宽度以匹配父对象,显然它忽略了xml。
我所做的改变:

public class ListItem extends LinearLayout {
.
.
.

public void setUp() {
    binding = ListItemBinding.inflate(LayoutInflater.from(mContext), this, true);
    setClickable(true);
    setFocusable(true);
    *setLayoutParams(new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));*
}

.
.
.

}

ukxgm1gy

ukxgm1gy1#

在中示例化时尝试设置它 onCreateViewHolder() :

@NonNull
@Override
public ListItemHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    ListItem listItem = new ListItem(parent.getContext());
    LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
                                                     MATCH_PARENT, WRAP_CONTENT);
    listItem.setLayoutParams(params);
    return new ListItemHolder(listItem);

}

相关问题