最近有個需求,就是在Fragment沒有切換的時候(show,hide)更新Fragment顯示的內容,想了一會,終於想到能夠用觀察者模式來解決這個問題的。ide
定義一個【被觀察者(接口)】:spa
public interface ISubject { void addObserver(PoemFragment obj); void deleteObserver(PoemFragment obj); void notifyObserver(); }
定義一個【觀察者(接口)】:code
public interface IObserver { void update(); }
在IndexActivity中implements ISubject,而後再IndexActivity中定義個集合保存Fragment:server
private List fragments = new ArrayList<>();
IndexActivity實現了ISubject的3個方法:blog
@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中使用:rem
if (myFragment.isAdded()){ transaction.show(dynastyFragment); notifyObserver();//通知Fragment更新
} else { transaction.add(R.id.framelayout,dynastyFragment); }
哈哈哈,大功告成了!!!其實很簡單的get