这里我主要分为4个步骤
定义被观察者Observabler接口
public interface MainTvClick { void onChangeListener(String string); }
创建观察者集合
//观察者集合 List<MainTvClick> mainTvClickList = new LinkedList<>();
添加观察者
/** * 添加观察者 * * @param observer */ public void addObserver(MainTvClick observer) { if (null == observer) { throw new NullPointerException("observer == null"); } synchronized (this) { if (!mainTvClickList.contains(observer)) { mainTvClickList.add(observer); } } }
删除观察者
/** * 删除观察者 * * @param observr */ public synchronized void deleteMainObserver(MainTvClick observr) { mainTvClickList.remove(observr); }
通知观察者
/** * 通知观察者 * * @param info */ public void notifyMainObserver(String info) { for (MainTvClick observer : mainTvClickList) { observer.onChangeListener(info); } }
记得单例哟
public static MainActivity instance; /** * 单例 * * @return */ public static MainActivity getInstance() { if (instance == null) { synchronized (MainActivity.class) { if (instance == null) { instance = new MainActivity(); } } } return instance; }
接下来就是使用了.
实现观察者 并且添加到 集合中
public class HomeFragment extends BaseFragment implements MainActivity.MainTvClick {... 这里其实就是实现接口方法 fragment = new HomeFragment(); // HomeFragment fragment1 = new HomeFragment(); MainActivity.getInstance().addObserver((MainActivity.MainTvClick) fragment);
被观察者做出改变,通知观察者
mToolbarTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { MainActivity.getInstance().notifyMainObserver("234"); } });
╔════════════════════════════════════════════════════════════════════════════════════════
1 ║ Thread: main
1 ╟────────────────────────────────────────────────────────────────────────────────────────
1 ║ APPFragment.onChangeListener (APPFragment.java:72)
1 ║ Logger.e (Logger.java:106)
1 ╟────────────────────────────────────────────────────────────────────────────────────────
11-24 13:34:31.936 11226-11226/com.tescoo.aat E/debugTAG: ║ 234
可以看到打印出来234了