Android, как обрабатывать имена кнопок в массиве

1

У меня есть несколько кнопок типа

font1 = (Button)findViewById(R.id.fontsize1);
font2 = (Button)findViewById(R.id.fontsize2);

Когда я нажимаю на кнопку, я хочу изменить ее цвет текста, а также изменить цвет текста остальных кнопок. Конечно, я не хочу писать много строк. Лучшая практика - это цикл.

    font1.setOnClickListener(new View.OnClickListener(){
        public void onClick(View v) {
            SaveFontSize("fontsize", "font1");
            font1.setTextColor(Color.parseColor(color_active));
            font1.setBackgroundResource(R.drawable.fonturesgreen);
            }
        }

        }); 

Я создал список:

List<String> fontarray = Arrays.asList("font1", "font2", "font3", "font4", "font5");

И в цикле я пытался это сделать:

  for (int i=0; i<5; i++) {
    fontarray.get(i).setTextColor(Color.parseColor(color_active));
    }

Это дает мне ошибку, поскольку fontarray.get(i) является строкой, а не кнопкой.

Теги:

3 ответа

0
Лучший ответ

Создание списка кнопок в качестве члена класса вместо:

List<Button> buttonArray = new ArrayList<Button>();

И в onCreate():

buttonArray.add((Button)findViewById(R.id.fontsize1));
// same for the rest

теперь вы можете получить к нему доступ так:

for (int i=0; i < buttonArray.length(); i++) {
    buttonArray.get(i).setTextColor(Color.parseColor(color_active));
}
1

вы можете на самом деле перебирать элементы управления в своем макете, находить кнопки и сравнивать их имена (или другие атрибуты, которые вы хотите) со значениями, хранящимися в вашем List<String>:

LinearLayout yourLayout = (LinearLayout) findViewById(R.layout.yourLayout);

for (int i = 0; i < yourLayout.getChildCount(); i++) {
    Object block = yourLayout.getChildAt(i);
    if (block instanceof Button) {
        Button btn = (Button)block;
        // do something with the button
    }
}
0

Вы должны сделать это так:

List<Button> fontarray = Arrays.asList(font1, font2, font3, font4, font5);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню