由于本人比较懒,技术博客写的也比较少,但是少而精是主要的。
本人公司做的是北斗的高精度产品 ,大致说下项目结构。之前项目中使用蓝牙接收公司自己北斗盒子中的数据包含北斗的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。
优点介绍完了,作为一个程序员,没有创新是不行的 ,时间充足的情况下肯定要自己懂手一翻的。
使用接口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); } }}
public void setAllData(String data) { // data就是从AFragment中要实时传递的数据 解析数据即可 parserData(data) }