我在一个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
的成员变量时,它居然是空的,而且上面那个名为log
的String
,也成空的了,这是为什么?难道Activity
不能通过Fragment
的引用直接调用它的方法么?
刚才又试了一试,感觉用Fragment
的引用调用Fragment
的方法完全没有任何用处,方法能走到,但是根本不能改变Fragment
的内部成员变量?为什么会是这样,那Activity
需要如何改变Fragment
的成员变量呢?
我找到原因了,我之前写的用来测试的代码一直没有删除,浪费了那么多时间。
谢谢你们给我的提示(有可能是Fragment重新创建了),解决了现在。
Activity是可以直接引用Fragment的。
你的那种调用方法是可以改变Fragment的成员变量的。更好的方式是写接口Activity与Fragment通讯
你出现log为空有2个可能:一是Activity或Fragment回收重新创建了,之前改变的属性没有恢复,相关技术点可以查看Activity数据恢复;二是你先后改变和打印日志的Fragment是两个引用。
建议贴更多的代码方便查看问题。