gpt4 book ai didi

android - ItemizedOverlay 中的 Roboguice

转载 作者:行者123 更新时间:2023-11-29 02:14:31 27 4
gpt4 key购买 nike

我正在探索 RoboGuice 的世界,并且更改了一个 map Activity ,现在可以使用它了。它是一个 RoboMapActivity,我已经将应用程序的扩展名更改为从 RoboActivity 继承。我已经成功地使用了@InjectView 如下..

public class MyMappingActivity extends RoboMapActivity {

@InjectView(R.id.mapview) MapView mMapView;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//setContentView injects all of the @values listed above
setContentView(R.layout.main);
DgApplication.data.setmPathProfile(this);
List<Overlay> mapOverlays = mMapView.getOverlays();
//etc...
}
//etc...
}

现在,我创建了一个 ItemizedOverlay,这就是我卡住的地方。我已经添加了

@Inject MyItemizedOverlay mMyItemizedOverlay;

在MyMappingActivity中,MyItemizedOverlay的摘录如下:

class MyItemizedOverlay extends ItemizedOverlay<OverlayItem> {

@Inject
public MyItemizedOverlay(Drawable marker) {
super(boundCenterBottom(marker));
}
}

我的问题是我必须为 ItemizedOverlay 父级提供默认标记,该标记位于构造函数中。我无法使用 @InjectResource 来做到这一点,因为构造函数中似乎不支持依赖注入(inject),并且我已经研究了模块中 bind().to() 的使用,但这似乎是针对接口(interface)而不是数据类型。

我觉得我应该在执行 @Inject 的 MyMappingActivity 中为 MyItemizedOverlay 定义参数,因为如果不使用 new MyItemizedOverlay( )

我的问题有两个:

首先,我的方向是否正确?其次,如何解决 MyItemizedOverlay 的构造函数问题?

最佳答案

这就是我要做的:

  • 修改您的 Application 类,使其具有如下内容:

private static Context instance;
@Override
public void onCreate() {
super.onCreate();
instance = this;
}
public static Context getContext(){
return instance;
}

这将使您无论身在何处都可以获得上下文实例。

  • 像这样创建一个 AbstractModule:

public final class YourGuiceModule extends AbstractModule {
@Override
protected void configure() {}

@Provides public MyItemizedOverlay getMyItemizedOverlay(){
Resources r = App.getContext().getResources();
Drawable d = r.getDrawable(R.drawable.something);
return new MyItemizedOverlay(d);
}
}

  • 通过在您的应用程序类中添加以下代码来注册您的模块:

@Override
protected void addApplicationModules(List<Module> modules) {
modules.add(new YourGuiceModule());
}

  • 现在您可以在代码中使用类似这样的东西:

private MyItemizedOverlay mio;
...

@Inject
public void setMyItemizedOverlay(MyItemizedOverlay blah){
mio = blah;
}

但是,请记住,与仅将其放入您的类(class)相比,这样做的工作量太大了:

MyItemizedOverlay m = new MyItemizedOverlay(getResources().getDrawable(R.drawable.blah));

依赖注入(inject)很好,但有时会使事情变得比应有的复杂。

关于android - ItemizedOverlay 中的 Roboguice,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5105333/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com