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

如何在Fragment中运行带CardView的RecyclerView?程序无法启动求助

问题分析与解决方案

嘿,我帮你揪出了困扰你一周的问题根源!这是个典型的小疏忽,咱们一步步来解决:

核心问题:空构造函数导致的隐式崩溃

你在TimeFragment里创建RecyclerViewAdapter时调用了这个构造函数:

RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(this,lstBook);

但对应的Adapter构造函数是空的!

public RecyclerViewAdapter(TimeFragment timeFragment, List<Book> lstBook) { }

它既没给mContext赋值,也没把传入的lstBook存到mData里。接下来Adapter执行onCreateViewHolder时,调用LayoutInflater.from(mContext),这里mContext是null,直接触发NullPointerException导致程序崩溃。你说没看到报错,应该是没注意Android Studio的Logcat(切换到Error级别就能看到这个致命异常)。

修复步骤

1. 修复RecyclerViewAdapter的构造函数

删掉那个没用的空构造函数,只保留通用的版本(适配所有Context场景):

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.MyViewHolder> { 
    private Context mContext ; 
    private List<Book> mData ; 

    // 只保留这个通用构造函数
    public RecyclerViewAdapter(Context mContext, List<Book> mData) { 
        this.mContext = mContext; 
        this.mData = mData; 
    } 

    // 删掉那个空的TimeFragment参数构造函数

    // ... 其他方法保持不变
}

2. 修改TimeFragment中创建Adapter的代码

在Fragment里获取Context推荐用requireContext()(比getActivity()更安全,能避免空指针风险):

RecyclerViewAdapter myAdapter = new RecyclerViewAdapter(requireContext(), lstBook);

3. 额外检查(防踩坑)

做完上面的修复后,再确认几个细节:

  • 你的cardveiw_item_book布局里,book_title_id、book_img_id、cardview_id这些控件ID拼写完全正确,没有打错字。
  • recyclerview布局里确实有recyclerview_id的RecyclerView控件。
  • 项目的build.gradle已经添加了必要依赖:
    implementation 'androidx.recyclerview:recyclerview:1.3.2'
    implementation 'androidx.cardview:cardview:1.0.0'
    
  • R.drawable.ic_in、R.drawable.ic_out这些图片资源确实存在,没有被误删。

最后测试

修改完成后重新运行,应该就能正常启动并显示带CardView的RecyclerView了。如果还是有问题,一定要去Logcat看Error日志,那里会明确告诉你哪里出了问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:16:23