Я пытаюсь программно установить изображения некоторых кнопок ImageButton в моем макете.Для этого я назвал свои ImageButtons от ic_1 до ic_5.
Во время моего метода инициализации я хочу просмотреть эти 5 кнопок ImageButton и установить их изображения в соответствии со списком возможных значков.По сути, пользователи могут изменять порядок отображения значков, что, в свою очередь, приводит к изменению изображения на кнопках ImageButtons.
Однако я не могу ссылаться на кнопки, поскольку у них целое число в их идентификаторе,Код, который я использую для этого, выглядит следующим образом:
for (int i = 1; i < 2; i++) {
String butid = "ic_"+i;
int resID = getResources().getIdentifier(butid, "id",
getPackageName());
ImageButton button = (ImageButton) findViewById(resID);
Однако это возвращает исключение NullPointerException, так как resID
возвращает 0. Когда я просто использую "ic_1" в butid
, оно также возвращает 0. Однакоесли я даю ImageButton идентификатор как ic_one, он работает.Но если я собираюсь использовать чистые текстовые идентификаторы, я не смогу перебирать кнопки ImageButtons.
Сначала я подумал, что это означает, что идентификатор Werent правильно переведен в файл R.java, нов нем присутствуют кнопки с их соответствующими идентификаторами, как показано ниже.
public static final int ic_1=0x7f05000e;
public static final int ic_2=0x7f05000f;
Кто-нибудь знает, если серьезно не возможно использовать int в идентификаторе объекта макета, и если да, если это возможноперебирать кнопки ImageButtons так, как я хочу, без целого числа в идентификаторе?Простой пример будет оценен.
Еще немного информации для Уоррена:
Спецификация макета:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mainscreen);
setMenuImage();
initMainScreen();
}
Полный код, который должен изменить значки:
public void initMainScreen() {
if (standard == false) {
retrieveLinks();
int size = mso.getHome().getIcon().size();
if (size > 0) {
for (int i = 1; i < 2; i++) {
String butid = "ic_"+i;
int resID = getResources().getIdentifier(butid, "id",
getPackageName());
String buttype = mso.getHome().getIcon().get(i)
.getIconName();
System.out.println(buttype.toLowerCase());
int typeID = getResources().getIdentifier(buttype.toLowerCase(),
"drawable", getPackageName());
ImageButton button = (ImageButton) findViewById(resID);
if(button != null){
button.setImageResource(typeID);
}else{
System.out.println(butid+" "+resID);
}
}
}
}
}
Спецификация в файле макета: (одинаково для всех кнопок)
<ImageButton android:layout_height="wrap_content"
android:layout_weight="33" android:layout_width="wrap_content"
android:src="@drawable/empty_icon" android:onClick="iconClick" android:background="@null" android:id="@+id/ic_1"></ImageButton>