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

Android Activity向Fragment传递ArrayList返回null致应用崩溃问题

崩溃原因

你遇到的空指针崩溃本质是Fragment初始化时机和传参时机不匹配:

  • 你在activity_main.xml里用<fragment>标签静态声明了TickerListFragment,系统会在Activity调用setContentView()解析布局时,自动创建这个Fragment的实例,立刻执行它的onCreateView生命周期。
  • 你给Fragment设置参数的逻辑写在setContentView()之后,这时候静态声明的Fragment已经初始化完成,且创建时没有携带任何Bundle参数,调用getArguments()自然返回null,触发空指针。
  • 你后续写的fragmentTransaction.replace()逻辑,要等布局解析完(此时崩溃已经发生)才会执行,根本赶不上Fragment第一次初始化的节点。
修复步骤

1. 替换布局中的静态Fragment标签

不要在XML里直接写死Fragment类名,换成通用的Fragment容器,避免系统提前自动创建无参Fragment实例。修改后的activity_main.xml代码如下:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <FrameLayout
        android:id="@+id/list_fragment"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

2. 给Fragment参数读取加空安全

不要直接链式调用getArguments()的方法,增加非空判断,极端场景下避免崩溃。修改TickerListFragment的onCreateView代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle state) {
    View view = inflater.inflate(R.layout.fragment_tickerlist, container, false);
    Bundle args = getArguments();
    if (args != null) {
        def_tickers = args.getStringArrayList("def");
    }
    // 兜底初始化,避免后续操作列表时空指针
    if (def_tickers == null) {
        def_tickers = new ArrayList<>();
    }
    return view;
}
注意事项
  • 你原来写的Fragment创建、传参、事务提交逻辑本身没有问题,只是静态Fragment标签的用法和动态传参逻辑冲突。
  • XML静态声明Fragment的写法只适合不需要动态传参的固定Fragment场景,只要需要给Fragment传动态参数,优先用容器+动态提交事务的写法。
  • 不要给Fragment写带参数的构造函数,系统在页面重建时会反射调用Fragment的无参构造,传参一律用setArguments()的方式,避免重建时参数丢失。

内容的提问来源于stack exchange,提问作者git-carlos

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 16:09:22