我在填一份表格 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));*
}
.
.
.
}
1条答案
按热度按时间ukxgm1gy1#
在中示例化时尝试设置它
onCreateViewHolder()
: