在我的应用程序中,我有一个情况,需要在垂直RecyclerView中创建水平RecyclerView。其中有些行将显示常规细节,而在某些行中将显示水平RecyclerView。
我已将水平RecyclerView的高度设置为wrap_content,但它不可见。但是当我将硬编码高度添加到其中时,RecyclerView就可见了。我已经搜索了很多关于这个问题的解决方案,但没有找到任何有效或令人信服的解决方案。
这是我的适配器类
public class HomeRVAdapter extends RecyclerView.Adapter<HomeRVAdapter.HomeViewHolder> {
private ArrayList<LinkedHashMap<String, Object>> data;
private Context ctx;
private int selectedIndex;
public HomeRVAdapter(Context ctx, ArrayList<LinkedHashMap<String, Object>> val) {
data = val;
this.ctx = ctx;
selectedIndex = -1;
}
@Override
public HomeViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = ((Activity) ctx).getLayoutInflater();
View view = inflater.inflate(R.layout.custom_home_recycler, null);
return new HomeViewHolder(view);
}
@Override
public int getItemCount() {
return data.size();
}
@Override
public void onBindViewHolder(final HomeViewHolder holder, final int position) {
if (getItemCount() == position+1) {
holder.categoryLL.setVisibility(View.GONE);
holder.productLL.setVisibility(View.VISIBLE);
LinearLayoutManager manager = new LinearLayoutManager(ctx);
manager.setOrientation(LinearLayoutManager.HORIZONTAL);
ArrayList<SubCategoryDetails> list = new ArrayList<>();
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
holder.subCatRV.setAdapter(new PromoProductAdapter(list, holder.subCatRV));
holder.subCatRV.setLayoutManager(manager);
} else {
holder.categoryLL.setVisibility(View.VISIBLE);
holder.productLL.setVisibility(View.GONE);
if (selectedIndex == position) {
holder.subCatGrid.setVisibility(View.VISIBLE);
showGrid(holder);
} else {
holder.subCatGrid.setVisibility(View.GONE);
}
holder.catTR.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (selectedIndex == position) {
holder.subCatGrid.setVisibility(View.GONE);
selectedIndex = -1;
} else {
selectedIndex = position;
showGrid(holder);
}
}
});
}
}
private void showGrid(HomeViewHolder holder) {
ArrayList<SubCategoryDetails> list = new ArrayList<>();
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
list.add(new SubCategoryDetails());
SubCategoryGridAdapter adapter = new SubCategoryGridAdapter(list);
holder.subCatGrid.setAdapter(adapter);
holder.subCatGrid.setVisibility(View.VISIBLE);
}
class HomeViewHolder extends RecyclerView.ViewHolder {
RecyclerView subCatRV;
TextView catTitleTV, productNameTV;
ImageView productIV;
NonScrollableGridView subCatGrid;
LinearLayout categoryLL, productLL;
TableRow catTR;
public HomeViewHolder(View view) {
super(view);
subCatRV = (RecyclerView) view.findViewById(R.id.subCatRV);
productNameTV = (TextView) view.findViewById(R.id.productNameTV);
catTitleTV = (TextView) view.findViewById(R.id.catTitleTV);
productIV = (ImageView) view.findViewById(R.id.productIV);
subCatGrid = (NonScrollableGridView) view.findViewById(R.id.subCatGrid);
categoryLL = (LinearLayout) view.findViewById(R.id.categoryLL);
productLL = (LinearLayout) view.findViewById(R.id.productLL);
catTR = (TableRow) view.findViewById(R.id.catTR);
}
}
class SubCategoryGridAdapter extends BaseAdapter {
ArrayList<SubCategoryDetails> subCatData;
public SubCategoryGridAdapter(ArrayList<SubCategoryDetails> subCatData){
this.subCatData = subCatData;
}
@Override
public int getCount() {
return subCatData.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = ((Activity) ctx).getLayoutInflater().inflate(R.layout.custom_sub_cat_grid, null, true);
}
return convertView;
}
@Override
public long getItemId(int position) {
return 0;
}
}
class PromoProductAdapter extends RecyclerView.Adapter<PromoProductAdapter.PromoHolder> {
ArrayList<SubCategoryDetails> data;
RecyclerView horizontalRV;
public PromoProductAdapter(ArrayList<SubCategoryDetails> data, RecyclerView horizontalRV){
this.data = data;
this.horizontalRV = horizontalRV;
}
@Override
public PromoHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = ((Activity) ctx).getLayoutInflater();
View view = inflater.inflate(R.layout.custom_promoted_product, null);
if (horizontalRV != null) {
int height = view.getMeasuredHeight();
horizontalRV.getLayoutParams().height = height;
}
return new PromoHolder(view);
}
@Override
public int getItemCount() {
return data.size();
}
@Override
public void onBindViewHolder(PromoHolder holder, int position) {
}
class PromoHolder extends RecyclerView.ViewHolder {
public PromoHolder(View view) {
super(view);
}
}
}
请帮助我解决这个问题。
wrap_content
高度。 - mr.icetea