gpt4 book ai didi

android - RecyclerView 适配器显示空白卡片 View

转载 作者:太空狗 更新时间:2023-10-29 12:39:24 50 4
gpt4 key购买 nike

我在 sub api21 设备上遇到了一个棘手的问题。我正在使用 RecyclerView.Adapter 适配器来膨胀 android.support.v7.widget.CardView。这个想法是卡片只会添加卡片中存在的信息。如果没有信息,则卡片根本不会显示。所以我以编程方式创建这些卡片。

以下是 api21 和 api19 的屏幕截图 api21 api19

请注意 api19 如何显示其中没有值的卡片。我认为问题是由适配器调用没有值的 onCreateViewHolder 引起的。有没有办法绕过onCreate?还是绑定(bind)?或者有没有办法让 sub api21 处理卡的方式稍有不同?

卡片 View XML

<android.support.v7.widget.CardView
xmlns:card_view="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/card_info"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="false"
android:focusable="true"
card_view:cardCornerRadius="5dp"
android:layout_margin="5dp"
card_view:cardUseCompatPadding="true">

<LinearLayout
android:id="@+id/card_info_lin"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"/>

适配器

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
switch(viewType) {
case VIEW_ENGINE:
itemViewEngine = LayoutInflater
.from(viewGroup.getContext())
.inflate(R.layout.card_info, viewGroup, false);
cardInfo.clear();

return new ViewHolderEngine(itemViewEngine, cardInfo);

case VIEW_TIRES:
itemViewTires = LayoutInflater
.from(viewGroup.getContext())
.inflate(R.layout.card_info, viewGroup, false);
cardInfo.clear();

return new ViewHolderTires(itemViewTires, cardInfo);

default: //General
itemViewGeneral = LayoutInflater
.from(viewGroup.getContext())
.inflate(R.layout.card_info, viewGroup, false);
cardInfo.clear();

return new ViewHolderGeneral(itemViewGeneral, cardInfo);
}
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int i) {
cardInfo = vehicleInfo.get(i);
switch (getItemViewType(i)) {
case VIEW_GENERAL:
new ViewHolderGeneral(itemViewGeneral, cardInfo);

break;

case VIEW_ENGINE:
new ViewHolderEngine(itemViewEngine, cardInfo);

break;

case VIEW_TIRES:
new ViewHolderTires(itemViewTires, cardInfo);

break;
}
}
}

Viewholder 类(第 1 个,共 3 个)

    class ViewHolderGeneral extends RecyclerView.ViewHolder {
private static final String TAG = "adapter_info_ViewHolder_gen";

private TypedArray headerColors;
private ArrayList<String> labels = new ArrayList<>();

public ViewHolderGeneral(View view, final ArrayList<String> cardInfo) {
super(view);

View layout = view.findViewById(R.id.card_info_lin);

DisplayMetrics metrics = layout.getContext().getResources().getDisplayMetrics();

...set up cards

最佳答案

您看到的差异很可能是由于 CardView 在子 API21 上使用了自己的填充/阴影机制。解决此问题的方法是让您的适配器在实际上没有数据时报告它有数据。换句话说,如果卡片因为项目为空而为空,则不要在计数中报告此项目(或跟踪它们)。

关于android - RecyclerView 适配器显示空白卡片 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28521008/

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