官方文档教我们,用RecyclerView的时候,创建View要这样。
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = null;
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_view, parent, false);
return new ViewHolder(v);
}
这样创建的itemView,就能在宽度上填满recyclerView。
但是有时候,ItemView特别复杂的时候,在这里inflate出来并不是很好,当View比较复杂的时候,往往自定义一个View,然后给个setData的方法让外面把数据丢进去比较好。
像这样:
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = null;
v = CustomerView(parent.getContext());
return new ViewHolder(v);
}
class CustomerView extends FrameLayout {
//...
}
但是这样就会有个问题,就是自定义的view,宽度不会自动占满RecyclerView,而是wrapContent的。
所以如何,解决呢?很简单:在CustomerView初始化的时候,给它设一下LayoutParams就好了。
比如:
@Override
public BaseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = null;
v = CustomerView(parent.getContext());
return new ViewHolder(v);
}
class CustomerView extends FrameLayout {
//...
private void init() {
RecylcerView.LayoutParams lp = new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
setLayoutParams(lp);
}
}
解决了问题:D
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。