2015-06-19 3 views
-1

Мне просто интересно, знаете ли вы, как это сделать. У меня есть активность, у которой есть пара ключевых значений, и я пытаюсь отобразить изображение, если ключ равен строке, иначе не отображается изображение.как динамически добавить изображение в изображениеView

Кто-нибудь знает, как и с чего начать, пытаясь заставить это работать правильно?

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

Это то, что у меня есть для цикла

+0

Добавить код, чтобы показать, что вы делаете. BTW вы можете использовать View.setVisibility(), чтобы показать/скрыть свой ImageView. –

+0

хорошо звучит, жаль, что я получил петлю, что я пытаюсь сделать работу, но пока не повезло –

+0

Хорошо. В чем проблема? –

ответ

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); 
     } 
    } 
+0

Так что в основном это был просто глючный код, что вам нужна помощь в отладке. В следующий раз попробуйте * самостоятельно изолировать проблему. Спросите себя, что может быть не так, а затем проверьте это. Здесь может быть цикл 'for',' if' test или resID, переданный 'setImageResource'. StackOverflow лучше всего использовать *** после *** вы протестировали каждый аспект своего кода и определили ***, какие строки *** не работают так, как вы ожидаете. Тогда у вас будет * конкретный * вопрос, чей ответ * будет полезен другим людям *. Здесь у вас есть «мой код сломан, и я не знаю почему». Решение этого только помогло вам. – ToolmakerSteve

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); 
0

Это c lassic случай проблемы XY. Ваша настоящая проблема - получить идентификатор ресурса из строки. на который ответили много раз до этого на 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; 
    } 
} 
+0

С этим, когда я положил его в свои андроид-студии, было немало вещей, которые я не мог решить или импортировать. –

+0

True. Это не то, что я тестировал. Также я не добавил импорт. Поэтому я могу представить, что у него были некоторые неразрешенные символы. Но я надеюсь, что это дало вам достаточно информации, чтобы указать на проблему и прийти к решению. –

0

Причина ваш образ не показывать, потому что здесь

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

Вы не установили правильный идентификатор ресурса вашего изображения. 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(); 
    } 
+0

будет ли это продолжаться внутри цикла? –

+0

Да, вы можете сделать это внутри цикла. – alijandro

+0

хорошо звучит хорошо, я дам ему попробовать очень быстро.Спасибо, ребята, за всю помощь с этим –