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