美文网首页
一个简单实用的NrxBus,求修改

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

作者: gcp | 来源:发表于2018-09-07 21:34 被阅读0次

    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);

    }

    }

    相关文章

      网友评论

          本文标题:一个简单实用的NrxBus,求修改

          本文链接:https://www.haomeiwen.com/subject/vyehgftx.html