34章里面只有个添加Run,感觉不太好,自己加了个删除Run的。结果发现删除Run后RunListFragment不更新,即便是执行了notifyDataSetChanged()。百度了一下才发现cursor需要requery一下才能刷新。网上有说可以auto requery,试了下不起作用,不知道是没用还是哪儿写错了。而且文档里面也不推荐讲requery的flag设置为true。
35章的代码有个bug。在点进RunFragment,迅速点start然后退回到RunListFragment(duration长的话更容易重现),再进RunFragment发现button都disable了,关掉再重新打开app发现多了一个Run,而且还处于tracking状态。原因就是RunLoader还没有加载好的情况下mRun是null的,app会重新建一个Run。fix也很简单,加一个flag,加载完成后在enable开始按钮。
36章用的是Google Map API v2,最近好像被墙了,弄了个高德地图代替。API用起来差不多,就是打开infowindow需要加几个Listener监听触摸事件。然后infowindow里面字符串需要换行的话加上“\n”就行了。
1 aMap.setInfoWindowAdapter(new InfoWindowAdapter() { 2 3 @Override 4 public View getInfoContents(Marker arg0) { 5 // TODO Auto-generated method stub 6 return null; 7 } 8 9 @Override 10 public View getInfoWindow(Marker arg0) { 11 // TODO Auto-generated method stub 12 return null; 13 } 14 15 }); 16 17 aMap.setOnMarkerClickListener(new OnMarkerClickListener() { 18 19 @Override 20 public boolean onMarkerClick(Marker marker) { 21 // TODO Auto-generated method stub 22 marker.showInfoWindow(); 23 return false; 24 } 25 26 }); 27 28 aMap.setOnMapClickListener(new OnMapClickListener() { 29 30 @Override 31 public void onMapClick(LatLng arg0) { 32 // TODO Auto-generated method stub 33 if (startMarker != null) { 34 startMarker.hideInfoWindow(); 35 } 36 if (endMarker != null) { 37 endMarker.hideInfoWindow(); 38 } 39 } 40 41 });