drawable getResources (). getIdentifier проблема - PullRequest
10 голосов
/ 18 июля 2010

это мой первый раз здесь (я считаю сайт очень полезным). Я новичок в Android и мне нужно выяснить, почему я не могу динамически загружать изображения в виде списка.

У меня есть три массива строк:

private String lv_arr[]={"News", 
        "Events", 
        "Other"};
private String lv_arr_d[]={"Get the latest news", 
        "Latest events", 
        "Other description here"};
private String lv_arr_icons[]={"news", "events", "other"};

Мой список отображает значок слева и две строки текста справа в каждом элементе списка. Это работает нормально, когда я жестко кодирую название изображения (например, новости).

ArrayList <HashMap <String, Object>> users = 
     new ArrayList <HashMap <String, Object>> ();
     int l = lv_arr.length;
     for (int i = 0; i <l; i++) {
     HashMap <String, Object> user = new HashMap <String, Object> ();

     //get icons
     String uri = "drawable/"+lv_arr_icons[i];

     user.put ( "icon", (Drawable)getResources().getDrawable(
             getResources().getIdentifier(uri, null, getPackageName())));
//the above works ok if i set R.drawable.news 
     user.put ( "label", lv_arr[i].toString()); 
     user.put ( "description",  lv_arr_d[i].toString()); 
     users.add (user); 
     }

     String[] names = {"icon", "label", "description"};
     int[] views = {R.id.icon, R.id.label, R.id.description};

     SimpleAdapter saImageItems = new SimpleAdapter(this.getApplicationContext(), 
             users,  R.layout.optionslistitem, names, views);
       lv1.setAdapter(saImageItems); //lv1 is my ListView

Все изображения находятся в папке для рисования. Есть идеи, почему изображение не загружается, когда я пытаюсь передать их имя и получить их из ресурсов?

Ответы [ 2 ]

27 голосов
/ 18 июля 2010

Что если вы просто сделаете это:

user.put ( "icon", getResources().getIdentifier(uri, "drawable", getPackageName()));
9 голосов
/ 13 ноября 2011

здесь вспомогательная функция

public static int getDrawable(Context context, String name)
{
    Assert.assertNotNull(context);
    Assert.assertNotNull(name);

    return context.getResources().getIdentifier(name,
            "drawable", context.getPackageName());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...