2017-08-20 1 views
-1

J'utilise MaterialDrawer lib pour générer un tiroir de navigation sous Android, j'essaie également d'obtenir une image d'une source externe et de la définir comme une icône dans l'objet DrawerItem et pour cela j'utilise Glide v4 lib pour télécharger l'image à partir de la source externe, mais je ne sais pas comment il mettrait à jour les espaces réservés d'icône dans chaque DrawerItem que j'ai dans le tiroir. Voici ce que je l'ai fait jusqu'à présent:Icône de chargement de l'URL dans la bibliothèque Android de MaterialDrawer utilisant Glide

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

    ... 

} 

Notez que je suis en train de télécharger l'image en utilisant Glide et charger l'image dans un ImageView puis extraire cette image comme un objet en utilisant Drawableiv.getDrawable(). Je le fais de cette façon parce que j'ai besoin que l'objet soit Drawable car c'est ce que la méthode accepte pour afficher cette icône dans le tiroir. Maintenant, le problème est quand j'appelle iv.getDrawable() il renvoie null et ne fonctionne pas comme prévu. Comment y parvenir?

aussi je pourrais faire quelque chose de mal ici? comme je l'ai vu dans les documentations, ils ont mentionné des bibliothèques comme Glide et Picasso peuvent être supportés mais ils n'ont pas ajouté assez d'exemples de la façon de le faire. Gardez à l'esprit que je suis encore nouveau sur Java et Glide, donc je ne suis pas sûr que ce soit la façon de le faire.

Toute aide serait appréciée :) Merci ..

Répondre

0

Je ne recommanderais pas le chargement d'un Drawable du serveur sur le thread d'interface utilisateur. En outre, je suppose que ce

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

vaudra toujours null au moment de l'accès.

Pour charger une icône d'un serveur pour les éléments de tiroir normal, s'il vous plaît utiliser la mise en œuvre DrawerImageLoader comme indiqué dans l'échantillon pour les profils (vous pourriez avoir besoin de faire de petits ajustements que l'API de glissement v4 a beaucoup changé)

Pour pouvoir charger une icône à partir d'un serveur pour les éléments normaux, vous devrez ajouter un CustomDrawerItem car ce n'est pas supporté par défaut. L'application de l'échantillon a une mise en œuvre de l'échantillon qui peut être utilisé par exemple:

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

+0

Merci, je l'ai finalement compris cela, bien qu'il serait agréable d'avoir que construit dans tous les objets drawerItem par défaut. Je n'aimais pas créer de nouvelles classes pour étendre la base DrawerItem afin de prendre en charge cette fonctionnalité pour chaque type de DrawerItem. Peut-être que je suis juste paresseux. mais je tiens à le garder propre, j'ai donc préchargé toutes les icônes en utilisant une activité d'écran de démarrage et stocké leurs drawables dans un Hashmap statique. Une fois que le processus est terminé, il m'amène à l'activité principale, maintenant Dans l'activité principale qui contient le tiroir tout ce que j'ai fait j'ai mis en correspondance ces drawables cachés à mon drawerItems et fait. – SolidSnake