如何在Android中以编程方式设置ImageViews源?

如何在Android中以编程方式设置ImageViews源?,android,Android,我正在制作一个复合ui元素,它接受一个对象(一个玩家),我想为这个玩家所效力的团队挑选相应的图像(玩家对象的图像编号有一个字符串值。我的项目的resources文件夹中有这些图像 如何为每个播放器指定正确的源代码。是否需要编写大量的if和else(检查字符串值)并使用res.getDrawable(R.drawable.no1)等等,或者有没有一种更优雅的解决方案,我可以通过某种方式使用字符串来指定到源的路径?我将字符串和图像之间的关系放在地图中: Map<String, Integer&

我正在制作一个复合ui元素,它接受一个对象(一个玩家),我想为这个玩家所效力的团队挑选相应的图像(玩家对象的图像编号有一个字符串值。我的项目的resources文件夹中有这些图像


如何为每个播放器指定正确的源代码。是否需要编写大量的if和else(检查字符串值)并使用res.getDrawable(R.drawable.no1)等等,或者有没有一种更优雅的解决方案,我可以通过某种方式使用字符串来指定到源的路径?

我将字符串和图像之间的关系放在地图中:

Map<String, Integer> map = new HashMap<String, Integer>();
map.put("blah", R.drawable.blah);
// etc...

或者,如果字符串的名称与图像的名称相同(与前面的情况相同),您可以使用此方法加载资源:

使用

如果我理解正确,您希望显示字符串中的图像资源。我在应用程序中这样做,用户可以从自定义列表首选项中选择图像,并将其显示在MainActivity布局中。可绘制资源ID作为stri存储在SharedReferences中ng匹配可绘制资源ID(字符串)示例:“@drawable/logo_image”。我使用以下参数提取ListPreference的值:

    SharedPreferences shared = getSharedPreferences("com.joshuariddle.recoveryworkscounter.settings", MODE_PRIVATE);
            String logo_id = (shared.getString("pref_logo",""));
这将以字符串形式返回可绘制资源,即@drawable/logo_image。然后要将该可绘制/图像插入我的布局,我使用:

    ImageView iv_logo = (ImageView) findViewById(R.id.imgLogo);
    iv_logo.setImageResource(getResources().getIdentifier(logo_id, "drawable", "com.yourpackage"));
这将通过setImageResource()将ImageView资源更改为新的可绘制资源,使用下面的方法返回的int,该方法从com.yourpackage中表示可绘制资源的字符串返回ID(int):

    getResources().getIdentifier(logo_id, "drawable", "com.yourpackage")
您也可以使用相同的方法来更改使用drawable的其他资源,例如布局背景等。您只需使用此方法将ID获取为int:

    getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage") 

该死,比我快26秒:)@MohitDeshpande:hahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahahaha。我忘了R.etc返回ints:/谢谢!
    getResources().getIdentifier("Resource Id String", "drawable", "com.yourpackage")