1. 程式人生 > >使用觀察者模式更新Fragment的內容

使用觀察者模式更新Fragment的內容

通知 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();
}

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的內容