使用觀察者模式更新Fragment的內容
阿新 • • 發佈:2017-11-20
通知 ack else oid date bject 問題 subject ++
最近有個需求,就是在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);
}
哈哈哈,大功告成了!!!其實很簡單的
使用觀察者模式更新Fragment的內容