一个简单实用的NrxBus,求修改

2018-09-07  本文已影响0人  gcp

package ccpg.lostjson;

import android.content.Context;

import android.text.TextUtils;

import java.util.ArrayList;

import java.util.List;

/**

* Created by Lostboy船长 on 2018/9/7.

*/

通过单例模式实现线程之间数据回调。本想用Hash把数据存储起来,已待需要时候提取。

觉得对象处理还是简单些好

public class NRxBus {

private  static NRxBusnRxBus;

//集合对象

    private List<NRxObject > nNRxObject =new ArrayList<>();

private NRxBus() {

}

//初始化单例模式

    public static NRxBus getNRxbus(){

if (nRxBus==null){

synchronized (NRxBus.class){

if (nRxBus==null){

nRxBus=new NRxBus();

}

}

}

return nRxBus;

}

//setData 用于Activity之间监听数据,做到及时更新

    public synchronized NRxBus setData(String value,String tag){

if (!TextUtils.isEmpty(tag)&&!TextUtils.isEmpty(value)&&!nRxObjects.isEmpty()){

for (NRxObject nrx:nRxObjects) {

if (nrx.tag.equals(tag)){

//被观察者数据提取

                    nrx.callData.calldata(value);

}

}

}

return this;

}

//添加监听对象

    public synchronized NRxBus addnRxObject(NRxObject nRxObject){

if (nRxObject!=null&&nRxObject.callData!=null)

nRxObjects.add(nRxObject);

return this;

}

//移除绑定监听对象

    public synchronized NRxBus removenRxObject(Context context){

if (context!=null){

//初始位置

  int loPosition=0;

for (int i =0; i<nRxObjects.size();i++){

if (nRxObjects.get(i).equals(context)) {

nRxObjects.remove(i-loPosition);

loPosition++;

}

}

}

return this;

}

//清除集合

public synchronized void clearObject(){

nRxObjects.clear();

}

//获取集合大小

public synchronized  int getSize(){

return nRxObjects.size();

}

//回调绑定对象

public static class NRxObject{

private    Stringtag;

private    JPCallData callData;

private  Stringname;

//context 文本类名 tag 数据传输标签 calldata 回调接口

        public NRxObject(Context context,String tag, JPCallData callData) {

this.name=context.getClass().getName();

this.tag = tag;

this.callData = callData;

}

//重写equals

        @Override

        public boolean equals(Object obj) {

if (obj==null){

return false;

}

return this.name.equals(obj.getClass().getName());

}

}

//回调接口

    public  interface JPCallData{

void calldata(String s);

}

}

上一篇下一篇

猜你喜欢

热点阅读