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

标签 android android-support-library android-cardview android-recyclerview

我在 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/

相关文章:

java - 在android中将图片发送到网络服务器时出错

android - 设计支持库 - SDK v21 使用哪个版本

java - 找不到 com.android.support :cardview-v7:27. 0.2

android - CardView 中的 layout_margin 无法正常工作

android - 无法解析 : com. android.support :appcompat-v7:15. +

android - Android window.device 上的 PhoneGap 未定义

android - 在android中添加数据以估计信标广告包

android - 更新 gradle 依赖项后 NavigationView 方法出错

android - java.lang.IllegalStateException : Can not perform this action after onSaveInstanceState with DialogFragment

android - CardView 的 OnClickListener?