gpt4 book ai didi

android - 垂直 recyclerView 中带有 wrap_content 的水平 recyclerView

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:02:38 25 4
gpt4 key购买 nike

在我的应用程序中,我必须在垂直 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);
}
}
}

请帮我解决这个问题。

最佳答案

一个更简单的解决方案可以是保持高度硬编码(因为它是水平 View ,高度可以保持固定)然后如果输入为空则隐藏水平回收器 View 。

if(list.size() == 0){
horizontalRecyclerView.setVisibility(View.GONE);
}

关于android - 垂直 recyclerView 中带有 wrap_content 的水平 recyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32689669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com