Ale*_*ndr 5 android google-maps dependency-injection dagger-2
我正在使用一个包装谷歌地图的库(例子是假的,以简化问题,但本质保持不变),比如为 GoogleMap 装饰器,并有 MarkerManager 用于添加、删除标记等。
//图书馆
import com.google.android.gms.maps.GoogleMap;
public class DelegatingGoogleMap {
GoogleMap map;
MarkerManager manager;
public class DelegatingGoogleMap(GoogleMap map){
this.map = map;
this.manager = new MarkerManager(map);
}
}
import com.google.android.gms.maps.GoogleMap;
public class MarkerManager {
public class GoogleMap map;
public class MarkerManager(GoogleMap map) {
this.map = map;
}
}
Run Code Online (Sandbox Code Playgroud)
在应用程序中我想使用自己的 MarkerManager's
//应用程序
public class MarkerManagerExtended extends MarkerManager {
public class MarkerManager(GoogleMap map) {
super(map);
}
}
Run Code Online (Sandbox Code Playgroud)
所以我想使用 Dagger 2 将 MarkerManagerExtended 注入到 DelegatingGoogleMap(属性注入)。
public class DelegatingGoogleMap {
GoogleMap map;
@Inject
MarkerManager manager;
public class DelegatingGoogleMap(GoogleMap map){
this.map = map;
}
}
Run Code Online (Sandbox Code Playgroud)
不确定,在这种情况下使用的 Dagger 是个好主意。
问题是在Moduleto 提供了一个实例,MarkerManagerExtended我必须将 com.google.android.gms.maps.GoogleMap 传递给构造函数。
@Module
public class MapModule {
@Provides
public MarkerManager providesMarkerManager() {
return new MarkerManagerExtended(map); //map instance of com.google.android.gms.maps.GoogleMap
}
}
Run Code Online (Sandbox Code Playgroud)
获取 GoogleMaps 看起来并不容易,所以我不确定是否应该在Module.
public class MapFragment extends com.google.android.gms.maps.SupportMapFragment {
GoogleMap map;
public void getMapAsync(final OnMapReadyCallback callback) {
if (map != null) {
callback.onMapReady(map);
} else {
getMapAsync(new OnMapReadyCallback() {
@Override
public void onMapReady(GoogleMap realMap) {
map = realMap;
callback.onMapReady(map);
}
});
}
}
}
FragmentManager fm = getChildFragmentManager();
mapFragment = (SupportMapFragment) fm.findFragmentById(R.id.map);
Run Code Online (Sandbox Code Playgroud)
任何想法如何将 MarkerManager 注入 DelegatingGoogleMap?
| 归档时间: |
|
| 查看次数: |
422 次 |
| 最近记录: |