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
的成员变量时,它居然是空的,而且上面那个名为log
的String
,也成空的了,这是为什么?难道Activity
不能通过Fragment
的引用直接调用它的方法么?
刚才又试了一试,感觉用Fragment
的引用调用Fragment
的方法完全没有任何用处,方法能走到,但是根本不能改变Fragment
的内部成员变量?为什么会是这样,那Activity
需要如何改变Fragment
的成员变量呢?
我找到原因了,我之前写的用来测试的代码一直没有删除,浪费了那么多时间。
谢谢你们给我的提示(有可能是Fragment重新创建了),解决了现在。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Activity是可以直接引用Fragment的。
你的那种调用方法是可以改变Fragment的成员变量的。更好的方式是写接口Activity与Fragment通讯
你出现log为空有2个可能:一是Activity或Fragment回收重新创建了,之前改变的属性没有恢复,相关技术点可以查看Activity数据恢复;二是你先后改变和打印日志的Fragment是两个引用。
建议贴更多的代码方便查看问题。
粘的代码太少。基于此怀疑是Activity重建了,或者是Activity中的fragment重建了,而新建的Activity活着Fragment都没有执行 这里提到的
setOptions
可以打印Fragment的构造函数和
setOptions
函数来 检查