Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 使用Dagger2提供依赖项_Android_Google Maps_Dependency Injection_Dagger 2 - Fatal编程技术网

Android 使用Dagger2提供依赖项

Android 使用Dagger2提供依赖项,android,google-maps,dependency-injection,dagger-2,Android,Google Maps,Dependency Injection,Dagger 2,我使用了一个包装Google地图的(假的例子来简化问题,但本质没有改变),比如GoogleMap的decorator,以及添加、删除标记等的MarkerManager //库 import com.google.android.gms.maps.GoogleMap; public class DelegatingGoogleMap { GoogleMap map; MarkerManager manager; public class DelegatingGoo

我使用了一个包装Google地图的(假的例子来简化问题,但本质没有改变),比如GoogleMap的decorator,以及添加、删除标记等的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;
    }       
}
在应用程序中,我想使用自己的
MarkerManager的

//应用程序

public class MarkerManagerExtended extends MarkerManager {

    public class MarkerManager(GoogleMap map) {
        super(map);
    }

}
所以我想使用Dagger 2来注入MarkerManager以删除GoogleMap(属性注入)

不确定,在这种情况下使用匕首是个好主意

问题是,在
模块中
要提供
MarkerManager扩展的实例
我必须将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
        }
    } 
获取GoogleMaps看起来并不容易,所以我不确定是否应该在
模块中编写它

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

你知道如何将MarkerManager注入DelegatingGoogleMap吗?

你是如何解决这个问题的?你能解释一下你是否解决了这个问题吗?
    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);