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

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

我在一个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重新创建了),解决了现在。


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


  1. Activity是可以直接引用Fragment的。

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

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

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

【热门文章】
【热门文章】