-1

我正在使用MaterialDrawer lib 在 Android 中生成导航抽屉,我还尝试从外部源获取图像并将其设置为 DrawerItem 对象中的图标,为此我正在使用Glide v4 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();

    ...

}

请注意,我正在尝试使用下载图像Glide并将图像加载到 中ImageView,然后Drawable使用iv.getDrawable(). 我这样做是因为我需要对象是Drawable该方法primary.withIcon(dr)接受的对象,以便在抽屉中显示该图标。现在的问题是当我调用iv.getDrawable()它时返回null并且不能按预期工作。如何做到这一点?

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

4

1 回答 1

0

我不建议Drawable在 UI 线程上从服务器加载。此外,我假设这

Target rb = Glide.with(this).asDrawable().load(icon).into(iv);
Drawable dr = iv.getDrawable();

将始终null在访问时返回。

要从服务器加载普通抽屉项目的图标,请使用DrawerImageLoader配置文件示例中所示的实现(您可能需要做一些小的调整,因为 v4 glide API 更改了很多)

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

https://github.com/mikepenz/MaterialDrawer/blob/develop/app/src/main/java/com/mikepenz/materialdrawer/app/drawerItems/CustomUrlPrimaryDrawerItem.java

于 2017-08-24T12:02:09.090 回答