You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android RecyclerView中CardView卡片运行时不显示排查

问题根因

你的判断准确,CardView无法展示的核心问题出在AdvertsFragment的onCreateView方法逻辑错误:

  • 你在Fragment布局完成inflate之前,直接对R.id.recycler_view这个Int类型的资源ID调用apply设置属性,根本没有获取到布局中真实的RecyclerView实例,所有设置LayoutManager、Adapter的操作全部无效,RecyclerView没有绑定适配器自然无法加载CardView条目。
  • 你的卡片布局存在额外问题:根CardView高度设置为match_parent,会导致单张卡片占满整个RecyclerView可视区域,后续条目被遮挡无法正常浏览。
  • 卡片布局内两个TextView宽度写死236dp,小屏设备上会出现内容溢出、显示不全的问题。
修复方案

1. 修正Fragment生命周期内的RecyclerView初始化逻辑

和你项目MainActivity的视图绑定写法保持统一,在inflate拿到布局实例后再初始化RecyclerView,修正后代码如下:

class AdvertsFragment : Fragment() {
    private lateinit var binding: FragmentAdvertsBinding
    private lateinit var layoutManager: RecyclerView.LayoutManager
    private lateinit var adapter: RecyclerAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
    }

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View {
        // 先inflate布局,获取视图绑定实例
        binding = FragmentAdvertsBinding.inflate(inflater, container, false)
        return binding.root
    }

    override fun onViewCreated(itemView: View, savedInstanceState: Bundle?) {
        super.onViewCreated(itemView, savedInstanceState)
        // 布局创建完成后再对真实RecyclerView实例做初始化
        layoutManager = LinearLayoutManager(requireContext())
        adapter = RecyclerAdapter()
        binding.recyclerView.apply {
            this.layoutManager = this@AdvertsFragment.layoutManager
            this.adapter = this@AdvertsFragment.adapter
            setHasFixedSize(true) // 固定RecyclerView尺寸时开启,提升滑动性能
        }
    }
}

如果暂时不使用视图绑定,可以直接用findViewById写法:

override fun onCreateView(
    inflater: LayoutInflater, container: ViewGroup?,
    savedInstanceState: Bundle?
): View {
    val rootView = inflater.inflate(R.layout.fragment_adverts, container, false)
    val recyclerView = rootView.findViewById<RecyclerView>(R.id.recycler_view)
    recyclerView.layoutManager = LinearLayoutManager(activity)
    recyclerView.adapter = RecyclerAdapter()
    return rootView
}

2. 修正card_layout.xml布局问题

调整根布局高度、优化文本控件约束,修正后代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/card_view"
    android:layout_margin="5dp"
    app:cardBackgroundColor="@color/oceanBlue"
    app:cardCornerRadius="12dp"
    app:cardElevation="3dp"
    app:contentPadding="4dp">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/forestGreen"
        android:id="@+id/relativeLayout"
        android:padding="16dp">
        <ImageView
            android:id="@+id/item_image"
            android:layout_width="100dp"
            android:layout_height="100dp"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"/>
        <TextView
            android:id="@+id/item_title"
            android:textColor="@color/black"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintStart_toEndOf="@+id/item_image"
            app:layout_constraintEnd_toEndOf="parent"
            android:layout_marginStart="16dp"
            android:textSize="30sp"/>
        <TextView
            android:id="@+id/item_detail"
            android:textColor="@color/black"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_marginStart="16dp"
            android:layout_marginTop="8dp"
            app:layout_constraintTop_toBottomOf="@+id/item_title"
            app:layout_constraintStart_toEndOf="@+id/item_image"
            app:layout_constraintEnd_toEndOf="parent"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.cardview.widget.CardView>
修复效果

重新编译运行后:

  • RecyclerView可以正常加载所有CardView卡片条目
  • 卡片高度自适应内容,支持正常滑动浏览所有条目
  • 点击卡片可正常弹出点击提示Toast
  • 不同尺寸屏幕下文本不会溢出显示不全

内容的提问来源于stack exchange,提问作者bn 41

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 23:45:45