Activity中通过Fragment的对象调用其方法时,无法将数据设置进入Fragment

发布于 2022-09-02 09:44:03 字数 1082 浏览 19 评论 0

我在一个Activity中包含了一个Fragment,在new的时候Activity保存了该Fragment的引用。然后再必要的时候,通过这个引用调用Fragment的函数。
这个写在Fragment中的函数是这个样子的:

    public void setOptions(StudyPlanCustomActivity.StudyPlanOptions options) {
        log = "fuck the Android Studio";
        modelMap = new HashMap<>();
        modelMap.put("career", options.careerArray);
        modelMap.put("education", options.educationArray);
        modelMap.put("reviewDegree", options.reviewDegreeArray);
        modelMap.put("examTimes", options.examTimesArray);
    }

然而,在之后我想使用这个Fragment的成员变量时,它居然是空的,而且上面那个名为logString,也成空的了,这是为什么?难道Activity不能通过Fragment的引用直接调用它的方法么?

刚才又试了一试,感觉用Fragment的引用调用Fragment的方法完全没有任何用处,方法能走到,但是根本不能改变Fragment的内部成员变量?为什么会是这样,那Activity需要如何改变Fragment的成员变量呢?

我找到原因了,我之前写的用来测试的代码一直没有删除,浪费了那么多时间。
谢谢你们给我的提示(有可能是Fragment重新创建了),解决了现在。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

但可醉心 2022-09-09 09:44:03
  1. Activity是可以直接引用Fragment的。

  2. 你的那种调用方法是可以改变Fragment的成员变量的。更好的方式是写接口Activity与Fragment通讯

  3. 你出现log为空有2个可能:一是Activity或Fragment回收重新创建了,之前改变的属性没有恢复,相关技术点可以查看Activity数据恢复;二是你先后改变和打印日志的Fragment是两个引用。

  4. 建议贴更多的代码方便查看问题。

白芷 2022-09-09 09:44:03

粘的代码太少。基于此怀疑是Activity重建了,或者是Activity中的fragment重建了,而新建的Activity活着Fragment都没有执行 这里提到的 setOptions
可以打印Fragment的构造函数和setOptions函数来 检查

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文