使用观察者模式更新Fragment的内容

Posted 马蹄子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用观察者模式更新Fragment的内容相关的知识,希望对你有一定的参考价值。

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

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

public interface ISubject {

    void addObserver(PoemFragment obj);

    void deleteObserver(PoemFragment obj);

    void notifyObserver();
}

 

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

public interface IObserver {
    void update();
}

 

IndexActivityimplements 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); 
}

 

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

以上是关于使用观察者模式更新Fragment的内容的主要内容,如果未能解决你的问题,请参考以下文章

片段不刷新其内容

实时数据中的 Observables 更新在片段中不起作用

如何在另一个 Fragment 中更新 ListView?

在tablayout片段之间进行通信[重复]

在 viewpager 中获取当前 Fragment 实例

Android强制Fragment重建View