RxBus实现页面值的回传
来源:互联网 发布:mac玩游戏怎么样 编辑:程序博客网 时间:2024/06/07 07:48
一,我本想着研究RxBus如Intent那样定向传值,但是技术有限或者是本就不能实现,我只做出了页面的回传值,比如第a1页面跳转到a2页面,a2页面返回的时候带回需要的值。 1.首先添加依赖, compile 'io.reactivex.rxjava2:rxjava:2.0.8' compile 'io.reactivex.rxjava2:rxandroid:2.0.1' 2.RxBus本不是库,而是一种模式,现在我们需要两个接口类来配置一下; public interface Function<Result, Param> { Result function(Param... data);}-----------------------------------public interface IObservable<T, P, R> { /** * 根据名称注册观察者 */ void registerObserver(String name, T observer); /** * 根据名称反注册观察者 */ void removeObserver(String name); /** * 根据观察者反注册 */ void removeObserver(T observer); /** * 根据名称和观察者反注册 */ void removeObserver(String name, T observer); /** * 根据名称获取观察者 */ Set<T> getObserver(String name); /** * 清除观察者 */ void clear(); /** * 通知观察者 * * @param name 名称 * @param p 参数 */ R notify(String name, P... p);}---------------------------3.创建RxBus类如下; public class RxBus<Param, Result> implements IObservable<Function, Param, Result> { private static final String TAG = "RxBus"; private HashMap<String, Set<Function>> _mapping; private final Object _lockObj = new Object(); private static RxBus _instance; public RxBus() { this._mapping = new HashMap<>(); } public static RxBus newInstance() { if (_instance == null) _instance = new RxBus(); return _instance; } @Override public void registerObserver(String name, Function observer) { synchronized (_lockObj) { Set<Function> observers; if (!_mapping.containsKey(name)) { observers = new HashSet<>(); _mapping.put(name, observers); } else { observers = _mapping.get(name); } observers.add(observer); } } @Override public void removeObserver(String name) { synchronized (_lockObj) { _mapping.remove(name); } } @Override public void removeObserver(Function observer) { synchronized (_lockObj) { for (String key : _mapping.keySet()) { Set<Function> observers = _mapping.get(key); observers.remove(observer); } } } @Override public void removeObserver(String name, Function observer) { synchronized (_lockObj) { if (_mapping.containsKey(name)) { Set<Function> observers = _mapping.get(name); observers.remove(observer); } } } @Override public Set<Function> getObserver(String name) { Set<Function> observers = null; synchronized (_lockObj) { if (_mapping.containsKey(name)) { observers = _mapping.get(name); } } return observers; } @Override public void clear() { synchronized (_lockObj) { _mapping.clear(); } } public Result notify(String name, Param... param) { synchronized (_lockObj) { if (_mapping.containsKey(name)) { Set<Function> observers = _mapping.get(name); for (Function o : observers) { return (Result) o.function(param); } } return null; } }}-------------------------------------ai页面要做的是接收数据 主要代码如下; private void initView() { but = (Button) findViewById(R.id.but); but.setOnClickListener(MainActivity.this); text = (TextView) findViewById(R.id.text); RxBus.newInstance().registerObserver("TT", new Function() { @Override public Object function(Object[] data) { text.setText((String)data[0]); return null; } }); } @Override protected void onDestroy() { super.onDestroy();//注销监听 RxBus.newInstance().removeObserver("TT"); }a2页面主要做的是传送数据主要代码如下; @Override public void onClick(View view) { if (view.getId() == R.id.but) { RxBus.newInstance().notify("TT", "黄家驹"); } else if (view.getId() == R.id.text) { finish(); } }好了就这样很简单的值的回传。我本菜鸟,还做不到灵活运用,我相信还有很多功能没开发出来,这只是一小步,后边如果有新的发现我会继续发出来的;不喜勿喷/
阅读全文
0 0
- RxBus实现页面值的回传
- rxbus的实现
- RxBus事件总线的实现
- RxBus的实现和使用
- RxBus事件总线的实现
- Android开发之--- 使用RxBus实现页面之间的数据实时更新
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- RxBus的实现及简单使用
- RxBus简单实现
- RxBus----Rxjava实现EventBus
- RxBus基本实现
- 用RxJava实现RxBus
- Rxbus实现事件总线
- Android RxJava 实现RxBus
- 实现RxBus代替EventBus
- RxAndroid2.0实现RxBus
- 【USACO2.3.3】和为零
- 关于Linux上SAMBA服务的权限问题(普通挂载)
- 每段时间Android开发10个知道(中级系列)-170725
- mysql远程连接:ERROR 1130 (HY000): Host '*.*.*.*' is not allowed to connect to this MySQL server解决办法
- PL/SQL 中显式游标的使用
- RxBus实现页面值的回传
- Handler、Looper、MessageQueue
- swoole刪除進程
- idea转换为java1.8
- 从零学linux的笔记
- 递归过程和递归计算过程
- PHP day1-3
- 网络请求篇--Retrofit2.0+RxJava+OkHttp
- jQuery中empty和remove的区别