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

能否在onActivityResult()中调用setArguments()并传递给Fragment/FragmentActivity?

关于Fragment和FragmentActivity参数传递的疑问解答

咱们先逐个解答你的两个技术疑问,再针对性解决你遇到的参数为null的问题:

1. 能在onActivityResult()中调用setArguments()给Fragment传参吗?

当然可以,但要注意一个核心前提:必须给刚创建、还没被添加到Activity的Fragment实例调用setArguments()。

setArguments()本来就是用来给Fragment传递初始化参数的,一旦Fragment通过FragmentTransaction的add()/replace()方法被添加到Activity,再调用这个方法就会直接抛出异常。你代码里创建ProductListFragment实例后立刻设置arguments的做法是完全正确的,这部分逻辑没问题。

2. 能在onActivityResult()中调用setArguments()给FragmentActivity传参吗?

不行哦,因为FragmentActivity(包括咱们常用的AppCompatActivity)根本没有setArguments()和getArguments()这两个方法——这俩是Fragment类独有的API。

如果要给FragmentActivity传递数据,得用Activity的Intent机制,或者把数据存到savedInstanceState里,别用Fragment的arguments那套逻辑。


解决你遇到的“FragmentActivity获取参数为null”问题

从你的代码描述来看,你大概率是混淆了Fragment和FragmentActivity的API用法,分两种情况给你解决方案:

情况1:你误在FragmentActivity(比如FirstActivity)的onCreate()里调用getArguments()

如果是这种情况,直接换一种获取数据的方式就行:
你是在onActivityResult()里拿到返回数据的,可以把这些数据存成Activity的成员变量,后续需要的时候直接用就行。比如:

// FirstActivity的成员变量
private String SORT_VALUE;
private String SORT_BY;

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SORT_RESULT && resultCode == RESULT_OK && data != null && data.getExtras() != null) {
        Bundle bundle = data.getExtras();
        // 把返回数据存为Activity成员变量
        SORT_VALUE = bundle.getString("SORT_VALUE");
        SORT_BY = bundle.getString("SORT_BY");
        // ...处理其他逻辑
    }
}

情况2:你其实是在ProductListFragment的onCreate()里调用getArguments()但返回null

这说明你设置了arguments的Fragment实例根本没被正确添加到Activity中。你现在的代码只创建了Fragment并设置了参数,但缺少了把这个实例替换/添加到Activity的关键步骤。

你需要补充FragmentTransaction的代码,比如:

// 在FirstActivity的onActivityResult()中,设置完arguments后添加这段代码
getSupportFragmentManager()
    .beginTransaction()
    .replace(R.id.fragment_container, frg) // 这里替换成你布局里的Fragment容器ID
    .commit();

这样一来,当ProductListFragment被添加到Activity后,它的onCreate()方法里调用getArguments()就能正确拿到你设置的参数了。另外要注意:每次需要传递新参数时,都要创建新的Fragment实例并设置arguments,别复用旧的实例哦。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:34:06