如何动态添加图像到imageView

时间:2015-06-19 22:15:22

标签: android android-activity

我只是想知道你们中是否有人知道如何做到这一点。我有一个具有键值对的活动,如果键等于字符串,我试图显示图像,否则不显示任何图像。

是否有人知道如何开始尝试使其正常工作?

 final String splitedDouble[] = companyString.split(",,");

    String[] arrayOfString = { "Beard Vape Co;beard_vape_co", "two;zwei", "three;drei" };

    Hashtable<String, String> hashTable = new Hashtable<String, String>();
    for(String s: arrayOfString){
        String[] array = s.split(";");
        String sKey ="", sValue="";
        if(array.length > 1){
            sKey = array[0]; sValue = array[1];
            hashTable.put(sKey, sValue);
            if(sKey.toString().equals(liquidCompany)){
                imageView.setImageResource(Integer.parseInt("R.drawable." + sValue.toString()));
            }
        }

这就是我对循环的看法

4 个答案:

答案 0 :(得分:0)

如果您已经使用ImageView设置了布局,则可以使用View.setVisibility显示或隐藏ImageView:

ImageView image = findViewById(R.id.image);
if (key.equals("String"))    
    image.setVisibility(View.VISIBLE);
else
    image.setVisibility(View.GONE);

如果要在布局充气后更改图像,可以使用

image.setImageResource(R.drawable.whatever);

答案 1 :(得分:0)

这是XY问题的经典案例。您真正的问题是从字符串获取资源ID。在SO之前已经回答了很多次。 link

试试这个:

final String splitedDouble[] = companyString.split(",,");

String[] arrayOfString = { "Beard Vape Co;beard_vape_co", "two;zwei", "three;drei" };


Hashtable<String, String> hashTable = new Hashtable<String, String>();
for(String s: arrayOfString){
    String[] array = s.split(";");
    String sKey ="", sValue="";
    if(array.length > 1){
        sKey = array[0]; sValue = array[1];
        hashTable.put(sKey, sValue);
        imageView.setImageResource(getResId("R.drawable." + sValue.toString(), Drawable.class));
        imageView.setVisiblity(View.GONE);
        if(sKey.toString().equals(liquidCompany)){
            imageView.setVisiblity(View.VISIBLE);
        }
    }

public static int getResId(String resName, Class<?> c) {
    try {
        Field idField = c.getDeclaredField(resName);
        return idField.getInt(idField);
    } catch (Exception e) {
        e.printStackTrace();
        return -1;
    }
}

答案 2 :(得分:0)

您的图片无法显示的原因是因为

imageView.setImageResource(Integer.parseInt("R.drawable." + sValue.toString()));

您没有设置图片的正确资源ID。 Integer.parseInt("R.drawable." + sValue.toString())返回无效的标识符。

您可以按照以下示例进行操作。

    Class<?> drawableClass = R.drawable.class;
    try {
        Field icLauncherField = drawableClass.getDeclaredField("ic_launcher");
        imageView.setImageResource(Integer.valueOf(icLauncherField.getInt(null)));
    } catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

答案 3 :(得分:0)

所以这是我遇到的问题的解决方案,我知道它不是最漂亮或最好的代码,但它具有我正在寻找的功能。感谢大家对这个问题的所有帮助!

String[] arrayOfString = { "Beard Vape Co.;beard_vape_co", "two;zwei", "three;drei" };

    List<String> sKeyArray = new ArrayList<>();
    List<String> sValueArray = new ArrayList<>();
    for(String s: arrayOfString) {
        String[] array = s.split(";");
        String sKey = "", sValue = "";
        if (array.length > 1) {
            sKey = array[0];
            sValue = array[1];
            sKeyArray.add(sKey);
            sValueArray.add(sValue);
        }

    }
    for(int i = 0; i < sKeyArray.size(); i++){
        if(sKeyArray.get(i).toString().contains(liquidCompany.trim().toString())){
            testingText.append(sKeyArray.get(i).toString());
            testingText.append(sValueArray.get(i).toString());
            int resID = getResources().getIdentifier(sValueArray.get(i).toString() , "drawable", getPackageName());
            imageView.setImageResource(resID);
        }
    }