1. 概述
有时候我们在开发过程中,有时候会使用rv嵌套rv、或者 rv加载多种item的布局文件,可能会遇到下边的问题:
问题1:rv加载多种类型的item布局,内容宽度显示不全;
问题2:rv嵌套rv,数据不能显示出来;
问题3:rv加载多种item布局时,其中有一个类型的布局文件是 rv或者lv或者GridView,item数据重复显示或者只能显示一条数据
2. 解决方法
解决问题1:在父布局中的 rv 的地方,写下边代码:
//设置布局管理器
// recyclerView.setLayoutManager(new LinearLayoutManager(CommodityDetailActivity.this));
LinearLayoutManager layoutManager = new LinearLayoutManager(CommodityDetailActivity.this) {
@Override
public RecyclerView.LayoutParams generateDefaultLayoutParams() {
return new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
}
};
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
recyclerView.setLayoutManager(layoutManager);
解决问题2:必须在 setAdapter之前设置 布局管理器:
@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
else if (holder instanceof ShopEvaluteHolder){
ShopEvaluteHolder evaluteHolder = (ShopEvaluteHolder) holder;
Log.e("TAG" , "CommodityDetailAdapter: " + evaluteList.size()) ;
EvaluateAdapter evaluateAdapter = new EvaluateAdapter(context , evaluteList) ;
layoutManager.setOrientation(LinearLayoutManager.VERTICAL);
evaluteHolder.recyclerView.setLayoutManager(layoutManager);
evaluteHolder.recyclerView.setAdapter(evaluateAdapter);
}
}
######解决问题3:对于ListView,只需要自定义MyListView继承ListView,然后重写onMeasure()方法即可,然后在该嵌套的 rv布局的item的布局文件中使用 MyListView 即可:
/**
- Email: 2185134304@qq.com
- Created by Novate 2018/2/11 8:47
- Version 1.0
- Params:
- Description:
*/
public class MyListView extends ListView {
public MyListView(Context context, AttributeSet attrs) {
super(context, attrs);
// TODO Auto-generated constructor stub
}
public MyListView(Context context) {
super(context);
// TODO Auto-generated constructor stub
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int newHeightSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2, MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, newHeightSpec);
}
}