如何在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
相关产品推荐
相关产品推荐

