如何注入BitmapDescriptor

时间:2014-07-23 07:43:47

标签: android roboguice

我正在使用Roboguice。

如何注入BitmapDescriptor?

通常没有Roboguice我做:

BitmapDescriptor file;
BitmapDescriptor resource;

file = BitmapDescriptorFactory.fromFile(new File...)
resource  = BitmapDescriptorFactory.fromResource(R.drawable...)

有没有办法注入这些值?

1 个答案:

答案 0 :(得分:0)

我想可能有几种方法可以做到这一点。这一切都取决于你想要如何接近它。

一种方法是使用Named绑定。让我们说你可以做R.drawable.bitmap_x引用的BitmapX。

bind(BitmapDescriptor.class).annotatedWith(Names.named("BitmapX")).toProvider(new Provider<BitmapDescriptor>() {
            @Override
            public BitmapDescriptor get() {
                return BitmapDescriptorFactory.fromResource(R.drawable.bitmap_x);
            }
        }).

在您的代码中,您可以使用此功能。

@Inject
@Named("BitmapX")
private BitmapDescriptor bitmapX

或者

@Inject
public SomeConstructor(@Named(BitmapX) BitmapDescriptor bitmapX) {
}

您还可以为要注入的每个位图创建自己的注释。您必须为要加载的每个不同的BitmapDescriptor创建一个注释。

@Target({ METHOD, CONSTRUCTOR, FIELD, PARAMETER })
@Retention(RUNTIME)
@BindingAnnotation
public @interface BitmapX {
}

然后你在你的模块中定义如此

bind(BitmapDescriptor.class).annotatedWith(BitmapX.class).toProvider(new Provider<BitmapDescriptor>() {
            @Override
            public BitmapDescriptor get() {
                return BitmapDescriptorFactory.fromResource(R.drawable.bitmap_x);
            }
        }).

然后你再次使用它。

@Inject
@BitmapX
private BitmapDescriptor bitmapX

@Inject
public SomeConstructor(@BitmapX BitmapDescriptor bitmapX) {
}

在这两种情况下,您都必须为每个要注入的BitmapDescriptor定义绑定。老实说,我不确定这是否值得这么麻烦,但这绝对可行。