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

Android Fragment中调用RecyclerView.setAdapter空指针崩溃是什么原因

问题根因

报错核心是RecyclerView对象为空时调用了setAdapter方法,触发空指针异常。
你将GetData方法放在了Fragment的onCreate生命周期回调中执行,而Fragment的onCreate阶段仅完成Fragment自身的实例创建,还未加载布局视图,此时无法通过findViewById绑定到布局中的RecyclerView控件,导致对象为空。
相同逻辑在Activity中可正常运行,是因为Activity的onCreate阶段执行setContentView后就可以完成布局控件的查找绑定,生命周期逻辑和Fragment存在差异。

修复方案

调整逻辑执行的生命周期节点即可解决问题,具体操作如下:

  • 移除onCreate方法中的GetData调用
  • 将RecyclerView的初始化绑定、数据加载逻辑都放到onViewCreated回调中执行,该回调触发时Fragment的布局已经加载完成,可以正常找到对应控件

代码示例

public class ContactsFragment extends Fragment {
    // 声明全局的RecyclerView对象
    private RecyclerView mRecyclerView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 删掉此处的GetData调用
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        // 加载Fragment对应的布局文件
        return inflater.inflate(R.layout.fragment_contacts, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        // 先完成RecyclerView的绑定和基础配置
        mRecyclerView = view.findViewById(R.id.contacts_recycler);
        // 必须设置布局管理器,否则RecyclerView也无法正常工作
        mRecyclerView.setLayoutManager(new LinearLayoutManager(requireContext()));
        // 初始化完成后再调用GetData加载数据、设置适配器
        GetData();
    }

    private void GetData() {
        // 你的读取联系人、设置Adapter的原有逻辑,直接使用已经初始化的mRecyclerView即可
        // mRecyclerView.setAdapter(yourAdapter);
    }
}

注意事项

  • 确保GetData方法中调用setAdapter的RecyclerView对象,是已经在onViewCreated中完成初始化的全局对象,不要重复声明局部同名对象导致全局对象仍为空
  • 读取系统联系人需要动态申请READ_CONTACTS权限,建议在权限申请通过后再执行GetData方法加载数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:48:04