Java 使用Glide从MaterialDrawer Android库中的URL加载图标

Java 使用Glide从MaterialDrawer Android库中的URL加载图标,java,android,icons,android-glide,materialdrawer,Java,Android,Icons,Android Glide,Materialdrawer,我使用lib在Android中生成一个导航抽屉,我还尝试从外部源获取一个图像,并将其设置为DrawerItem对象中的图标,为此,我使用lib从外部源下载图像,但不确定它如何更新抽屉中每个DrawerItem中的图标占位符。以下是我迄今为止所做的工作: @Override protected void onCreate(Bundle savedInstanceState) { ... ArrayList<IDrawerItem> drawerItems = new

我使用lib在Android中生成一个导航抽屉,我还尝试从外部源获取一个图像,并将其设置为DrawerItem对象中的图标,为此,我使用lib从外部源下载图像,但不确定它如何更新抽屉中每个DrawerItem中的图标占位符。以下是我迄今为止所做的工作:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    ...

    ArrayList<IDrawerItem> drawerItems = new ArrayList<IDrawerItem>();
    String icon = "http://myiconwebsite.com/myicon.png";

    //create Drawer Item obj
    PrimaryDrawerItem primary = new PrimaryDrawerItem();

    //set title
    primary.withName("Test");
    primary.withIdentifier(1);
    primary.withSelectable(false);

    //define image view for Glide
    //I'm defining this image view so I can load the downloaded image into it so I can get the loaded image as Drawable
    final ImageView iv = new ImageView(this);

    //load the image in the view
    Target rb = Glide.with(this).asDrawable().load(icon).into(iv);

    //get the drawable object from the image view
    Drawable dr = iv.getDrawable();

    //set the icon of this drawer
    primary.withIcon(dr);

    //add it to the list of drawers
    drawerItems.add(primary);

    //create our drawer
    DrawerBuilder result = new DrawerBuilder();
    result.withActivity(this);
    result.withDrawerItems (drawerItems);

    ...

    result.build();

    ...

}
@覆盖
创建时受保护的void(Bundle savedInstanceState)
{
...
ArrayList drawerItems=新的ArrayList();
字符串图标=”http://myiconwebsite.com/myicon.png";
//创建抽屉项目对象
PrimaryDrawerItem primary=新的PrimaryDrawerItem();
//定名
主要。名称为(“测试”);
主标识符(1);
主要。可选择(假);
//定义滑动的图像视图
//我正在定义此图像视图,以便将下载的图像加载到其中,以便将加载的图像作为可绘制图像
最终图像视图iv=新图像视图(本);
//在视图中加载图像
Target rb=Glide.with(this).asDrawable().load(icon).into(iv);
//从图像视图中获取可绘制对象
Drawable dr=iv.getDrawable();
//设置此抽屉的图标
主图标(dr);
//将其添加到抽屉列表中
添加(主);
//创造我们的抽屉
DroperBuilder结果=新的DroperBuilder();
结果:有活动(本);
结果.取款单(付款单);
...
result.build();
...
}
请注意,我正在尝试使用
Glide
下载图像,并将图像加载到
ImageView
中,然后使用
iv.getDrawable()
将该图像提取为
Drawable
对象。我这样做是因为我需要对象是可绘制的,因为这是方法
primary.withIcon(dr)
接受的,以便在抽屉中显示图标。现在的问题是,当我调用
iv.getDrawable()
时,它返回
null
并且不能按预期工作。如何做到这一点


我可能在这里做错了什么?正如我在文档中看到的,他们提到可以支持像
Glide
Picasso
这样的LIB,但他们没有添加足够的例子来说明如何做到这一点。请记住,我对Java和Glide还是新手,所以我不确定这是不是一种方法。

我不建议在UI线程上从服务器加载
可绘制的
。此外,我假设

Target rb = Glide.with(this).asDrawable().load(icon).into(iv);
Drawable dr = iv.getDrawable();
访问时将始终返回
null

要从服务器加载普通抽屉项目的图标,请使用配置文件示例中所示的
DrawerImageLoader
实现(由于v4 glide API发生了很大变化,您可能需要进行一些小的调整)

为了能够从服务器加载普通项目的图标,您必须添加一个
CustomDrawerItem
,因为默认情况下不支持此操作。示例应用程序有一个示例实现,例如:


谢谢,我终于明白了这一点,不过在默认情况下,在所有的drawerItem对象中内置它会很好。我有点不喜欢创建新的类来扩展基本的DrawerItem,以便为每种DrawerItem类型支持此功能。也许我只是懒惰。但我喜欢保持它的整洁,所以我使用一个启动屏幕活动预装了所有图标,并将它们的可绘制内容存储在一个静态Hashmap中。流程完成后,我将进入主活动,现在在包含抽屉的主活动中,我所做的一切都是将这些缓存的抽屉映射到我的抽屉并完成。