Fragment中使用接口的形式实时的传递数据,代替Eventbus

由于本人比较懒,技术博客写的也比较少,但是少而精是主要的。

本人公司做的是北斗的高精度产品 ,大致说下项目结构。之前项目中使用蓝牙接收公司自己北斗盒子中的数据包含北斗的GGA

数据(

$GPGGA,025521.62,3447.6103576,N,11332.2176936,E,1,00,1.0,119.751,M,-19.751,M,0.0,*62

)接收到GGA数据后返给差分服务器,然后解析差分数据 数据中包含所接收的北斗卫星数,是否是高精度(指精度在cm级别),经纬度,海拔,仰角,方位角,可视卫星数等数据,这些数据要再首页点的fragment中展示,获取到高精度的经纬度后发送给另外的fragment,此设备是装在车上的,要实时的显示出车的位置。所以就用到frangment间实时的传递数据问题。

第一个想到是用Eventbus

EventBus是一款Android下的发布/订阅事件总线机制。可以代替Intent、Handler、Broadcast等在Fragment、Activity之间传递消息。
优点:开销小,代码优雅。将发送者和接受者解耦。

优点介绍完了,作为一个程序员,没有创新是不行的 ,时间充足的情况下肯定要自己懂手一翻的。

使用接口interface来实现

首先在Afragment中定义接口,

public interface DataInterface {
    public void onSetData(String data);

       }

需要在Afragment中实现一个方法   初始化DataInterface

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    try {
        mdataInterface = (dataInterface) context;
    } catch (Exception e) {
        throw new ClassCastException(getActivity() + "must implement OnArticleSelectedListener");
    }
}

然后再需要使用实时传递数据的地方

if (ijwdu[0] != null) {
    if (ijwdu[0].indexOf("GGA") != -1) {  // 查到GGA
        //发送gga
        mdataInterface.onSetData(igga[i]);
        if (ijwdu.length > 13) {
            if (ijwdu[6] != null) {
                if (ijwdu[6].equals("4")) {// 差分定位
                    tv_box_state.setText("高精度");
                    tv_box_state.setTextColor(Color.RED);
                } else {
                    tv_box_state.setText("普通精度");
                }
            }

数据已经发出  Afragment是主MainActivity中的一个,需要在MainActivity中实现这个接口。

public class MainActivity extends BaseActivity implements HomeFragment.dataInterface {

    然后实现接口里的方法
@Override
public void onSetData(String data) {
    if (BFragment != null) {
        BFragment.setData(data);
    } else {
        BFragment = new TextFragment();
        BFragment.setData(data);
    }
}
}
接下来只管再Bfragment中定义一个和MainActivity中的方法一致就可以了

public void setAllData(String data) {

   // data就是从AFragment中要实时传递的数据    解析数据即可
   parserData(data)

}



猜你喜欢

转载自blog.csdn.net/u010354511/article/details/80437138