启动含Fragment、RecyclerView及Adapter的Activity时应用崩溃求助
从你提供的Logcat信息来看,核心问题非常明确:你在调用RecyclerView.setAdapter()方法时,RecyclerView实例是null,也就是代码里没有成功找到布局中的RecyclerView控件,才触发了这个空指针异常,报错位置在FeedActivity.java的第133行onStart()方法中。
下面是针对性的排查和解决步骤:
先确认ID匹配度
检查你在代码中通过findViewById()获取RecyclerView时用的ID,和布局文件(比如activity_feed.xml)里RecyclerView的android:id是否完全一致——大小写、下划线都不能错,比如布局里是@+id/recycler_feed_list,代码里就不能写成R.id.recyclerFeedList。把RecyclerView初始化放在正确的生命周期里
你现在是在onStart()里调用setAdapter(),但RecyclerView的初始化必须在布局加载完成后执行,最合适的时机是onCreate()方法(Activity场景)或者onViewCreated()方法(Fragment场景):// Activity中的正确示例 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_feed); // 必须先加载布局! // 初始化RecyclerView RecyclerView recyclerView = findViewById(R.id.your_recycler_id); // 别忘了设置布局管理器,这是RecyclerView正常工作的必要条件 recyclerView.setLayoutManager(new LinearLayoutManager(this)); // 初始化Adapter并设置 YourCustomAdapter adapter = new YourCustomAdapter(yourDataList); recyclerView.setAdapter(adapter); }如果是在Fragment中使用,要在
onViewCreated()里通过view.findViewById()获取控件:@Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); RecyclerView recyclerView = view.findViewById(R.id.fragment_recycler_id); recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); recyclerView.setAdapter(yourAdapter); }检查布局文件是否正确加载
确认FeedActivity的setContentView()加载的是包含目标RecyclerView的布局文件,别不小心加载了其他布局导致控件找不到。
另外补充两个常见的坑:
- 如果用了ViewBinding/DataBinding,要确保绑定对象已经正确初始化,比如
ActivityFeedBinding binding = ActivityFeedBinding.inflate(getLayoutInflater());,然后通过binding.recyclerView获取实例,而不是用传统的findViewById。 - 所有RecyclerView的初始化、Adapter设置操作都必须在主线程执行,别在异步线程里做这些操作。
内容的提问来源于stack exchange,提问作者I.Kuznec

