2017-08-20 17 views
-1

Androidでナビゲーションドロワーを生成するのにMaterialDrawer libを使用していますが、外部ソースから画像を取得してDrawerItemオブジェクトのアイコンとして設定しようとしていますそのためにはGlide v4 libを使って外部ソースから画像をダウンロードしていますが、ドロワーにある各DrawerItemのアイコンのプレースホルダーをどのように更新するかはわかりません。ここで私はこれまで何をやったかだ:私はGlideを使用してイメージをダウンロードし、ImageView内の画像をロードしiv.getDrawable()を使用してDrawableオブジェクトとしてそのイメージを抽出しようとしているGlideを使用してMaterialDrawer AndroidライブラリのURLからアイコンをロード

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

    ... 

} 

注意してください。私はドロワーにそのアイコンを表示するためにprimary.withIcon(dr)が受け入れる方法であるので、オブジェクトがDrawableである必要があるので、そのようにしています。問題は私がiv.getDrawable()と呼ぶとnullを返し、期待どおりに動かないときです。それを達成する方法?

私はここで何か間違っている可能性がありますか?私がドキュメントで見たように、とPicassoのようなlibsをサポートすることができますが、それを行う方法の例は十分にはありませんでした。私はまだJavaとGlideの新機能を持っているので、そうすることができるかどうかはわかりません。任意の助けをいただければ幸いです

:)おかげで..私はUIスレッド上のサーバからDrawableをロードすることをお勧めしません

答えて

0

。また、私はこの

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

は常にアクセス時にnullを返すことを前提としています。プロファイルのサンプルに示すように

通常の引き出し項目のサーバからアイコンをロードするには、

(あなたがV4グライドAPIが大きく変化して微調整を行うために必要がある場合があります) DrawerImageLoader実装を使用してください

通常のアイテムのサーバーからアイコンをロードできるようにするには、デフォルトではサポートされていないので、CustomDrawerItemを追加する必要があります。デフォルトでdrawerItemオブジェクトのすべてに内蔵されていることがあると便利だろうが、私は最終的には、以下のことを考え出した

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

+0

ありがとう:サンプルアプリケーションは、例えば使用することができますサンプル実装を持っています。基本的なDrawerItemを拡張して、各DrawerItemタイプごとにこの機能をサポートするための新しいクラスを作成するのは嫌です。たぶん私は怠け者だ。私はそれをきれいに保つので、スプラッシュ画面のアクティビティを使用してすべてのアイコンをプリロードし、静的なハッシュマップにそのドロアブルを保存しました。プロセスが完了すると、メインのアクティビティに移動します。現在、ドロワを含む主なアクティビティでは、キャッシュされたドロアブルをすべて私のdrawerItemsにマップして実行しました。 – SolidSnake

関連する問題