2016-09-12 5 views
0

ImageViewリソースを文字列から動的に設定したいのですが、以下の方法ではできませんでした。ImageView SetImageResource from string動的に

私はXamarin/Androidを使用してImageViewリソースを以下のように動的に設定しています。

ImageView homeItemImage = convertView.FindViewById<ImageView>(Resource.Id.homeItemImage); 
int imageId = PlatformProvider.GetImageId(Context, contentTitle.IconImageUrl); 
homeItemImage.SetImageResource(imageId); 

GetImageId機能:

public static int GetImageId(Context context, string imageName) 
{ 
// int identifier = context.Resources.GetIdentifier(imageName, "drawable", context.PackageName); 
int identifier = context.Resources.GetIdentifier(context.PackageName + ":drawable/" + imageName, null, context.PackageName); 
return identifier; 
} 

私は両方のリターンがINT "Account.png" または "アカウント" とimagenameの両方wasyを渡しています0

enter image description here

enter image description here

として

私の画像フォルダは次のとおりです:

qqq

そして、私はAndroidResource(ここAbout.pngショーですが、Account.pngがあるのと同じ方法)として、それらを設定するには:

qqq

彼らはインテリセンスに表示:

qqq

文字列からイメージソースを設定するにはどうすればよいですか?

+1

特に[この回答](http://stackoverflow.com/a/35649014/1440565)を参照してください。 –

+0

@ Code-Apprenticeその答えは私が探しているものです。これはxamarin側からの奇妙な実装です。指摘してくれてありがとう。 –

答えて

0

Ressources必要not contains special character - >

フォルダ内の各ファイルは R.javaクラス内のJavaフィールド名に変換され

描画可能\ icon.pngと - > R.drawable.iconしたがってファイル名に という特殊文字を使用しない理由は、Javaの の名前では使用できないためです。

大文字については、 WindowsとLinuxの環境で小さな問題を避けるためだと思います。これは、Linuxは Icon.pngとicon.pngが異なるファイルであると考えているため、Windowsは Icon.pngとicon.pngが同じファイルだとWindowsは考える。したがって、Linuxを使用している人なら誰でもWindows上でコンパイルできないアプリケーションを作成することができます。

+0

ええ、これは私が試した最初の選択肢です。 context.Resources.GetIdentifier(imageName、 "drawable"、context.PackageName);常に0を返します。 –

+0

しかし、なぜあなたはcontext.getRessources()の代わりにcontext.Ressourcesをやっているのですか? – Jaythaking

+0

あなたはcontext.PackageNameを意味しますか? Android上ではXamarinの実装であり、正しいパッケージ名が返されることを確認しました。 –