最近有个需求,就是在Fragment没有切换的时候(show,hide)更新Fragment显示的内容,想了一会,终于想到可以用观察者模式来解决这个问题的。

定义一个【被观察者(接口)】:

public interface ISubject {

    void addObserver(PoemFragment obj);

    void deleteObserver(PoemFragment obj);

    void notifyObserver();
}

定义一个【观察者(接口)】:

public interface IObserver {
void update();
}

在IndexActivity中implements ISubject,然后再IndexActivity中定义个集合保存Fragment:

private List fragments = new ArrayList<>();

IndexActivity实现了ISubject的3个方法:

@Override
public void addObserver(PoemFragment obj) {
fragments.add(obj);
} @Override
public void deleteObserver(PoemFragment obj) {
fragments.remove(obj);
} @Override
public void notifyObserver() {
for (int i =0;i<fragments.size();i++){
fragments.get(i).update();
}
}

接下来,让MyFragment implements IObserver,实现update方法,这个方法里面做fragment的更新操作

在indexActivivity中需要更新Fragment的地方,调用 notifyObserver() 就可以了,我在indexActivity中使用:

if (myFragment.isAdded()){
transaction.show(dynastyFragment);
notifyObserver();//通知Fragment更新
} else {
transaction.add(R.id.framelayout,dynastyFragment);
}

哈哈哈,大功告成了!!!其实很简单的

最新文章

  1. 课堂Java小程序(加减乘除与验证码)
  2. css3伪类温故知新
  3. MVC中使用jquery uploadify上传图片报302错误
  4. Hibernate学习笔记(二)
  5. ASP.NET mvc异常处理的方法
  6. html5之我見
  7. C#中多线程的简单应用
  8. 总结showModalDialog在开发中的一些问题
  9. shape的使用
  10. Spring Dubbo 开发笔记
  11. WC2019游记
  12. Go-Ethereum 1.7.2 结合 Mist 0.9.2 实现众筹合约的实例
  13. Eclipse优化常用方法
  14. 一些有用的js插件
  15. jQuery通过input标签的name获取值
  16. openwrt-rpcd服务ACL配置错误风险分析
  17. DataTable拷贝DataRow
  18. 命令行 AppleScript 操控 iTerm2
  19. 微软Holographic将更名为Windows Mixed Reality
  20. from __future__ import print_function

热门文章

  1. OC 中 self 与 super 总结
  2. ElasticSearch 处理自然语言流程
  3. 安装mysql-installer-community
  4. 微信小程序tabBar 不显示底部菜单的原因和解决方法
  5. Css文件目录结构
  6. 在Ubuntu环境下配置NIMH MEG Core Facility之CTF Tools
  7. ImportError: No module named PIL
  8. getline()读入一整行
  9. linux 命令——42 kill (转)
  10. 选中ListBox控件中的全部项