2012-04-30 7 views
1

У меня есть следующая настройка. В моем xml у меня есть куча изображений. Я пытаюсь показать только один из них в зависимости от числа, установленного в настройках и в день недели. Это должно быть очень просто, но я не могу найти правильный способ передать переменную в findViewByID. Вот фрагмент кода:Передача переменной в findViewByID

String groupName = "R.id."+prefs.getString("groupListKey", "<unset>")+"_"+(Calendar.getInstance().get(Calendar.DAY_OF_WEEK)); 

ImageView image = (ImageView) findViewById(groupName); 

ответ

2

findViewById() ожидает, что вы передаёте целое число, представляющее идентификатор ресурса. Вы пытаетесь передать ему строку

Лучше всего будет иметь условный оператор, который оценивает свой день недели и возвращает вам правильный идентификатор, а не делать это так, как вы

int resourceId = 0; 
switch (Calendar.getInstance().get(Calendar.DAY_OF_WEEK)) { 
    case Calendar.SUNDAY: 
     resourceId = R.id.sundayView; 
     break; 

    case Calendar.MONDAY: 
     resourceId = R.id.mondayView; 
     break; 

    ...etc 
} 

ImageView image = (ImageView) findViewById(resourceId); 
1

findViewById получает в качестве аргумента int, который является одним из сгенерированных в классе R.id.

Вы можете иметь массив с вашими идентификаторами:

int[] imagesIds = new int[] { R.id.image1, ... R.id.image7 }; 

А затем определить индекс на основе ваших условий:

int imageIndex = ... 
ImageView image = (ImageView) findViewById(imagesIds[imageIndex]); 
Смежные вопросы