2015-05-26 3 views
1

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

У меня есть программа с 168 различными кнопками, каждая из которых подсчитывает, сколько раз они были нажаты. После того, как нажали или не нажали все кнопки, мне нужно инактивировать и серо-выключить те, которые не были нажаты. До сих пор я использовал 3D-массив для хранения, сколько раз была нажата каждая кнопка, и сделал простой код:

if(a[0][0][0]<1) 
{ 
    ImageButton button_a1=(ImageButton) findViewById(R.id.button1a); 
    button_ca1.setEnabled(false); 
    button_ca1.setAlpha(6); 
} 

Единственная проблема заключается в том, что, поскольку каждый buttonID отличается я должен сделать это 168 раздельно. Есть ли способ сделать это простым циклом, который не занимает более 1000 строк кода?

Программа написана с использованием Eclipse и используется для приложения Android.

+0

Почему 3d массив? Кажется, 1d массив ints будет делать? – FunkTheMonk

+0

@FunkTheMonk Мне нужно хранить несколько значений для некоторых вещей, расположенных на полке. Следовательно, 2d наиболее просто иллюстрирует полку и 3-е измерение для хранения разных значений для каждой позиции на полке :) – impedans

ответ

0

Если все кнопки находятся в одном макете, вы можете использовать getChildCount():

LinearLayout layout = setupLayout(); 
int count = layout.getChildCount(); 
View v = null; 
for(int i=0; i<count; i++) { 
    v = layout.getChildAt(i); 
    if (v instanceof ImageButton) { 
     v.setEnabled(false); 
     v.setAlpha(6); 
    } 
} 

Если нет, то просто создать Set, List или Array со всеми кнопками и итерацию над ней:

List<ImageButton> buttons = new ArrayList<ImageButton>(); 

// be sure buttons is visible in the method 
// when creating the buttons put them inside the list 

Тогда в вашем методе:

if(a[0][0][0]<1) 
{ 
    // disable all buttons 
    for(ImageButton button : buttons) { 
     button.setEnabled(false); 
     button.setAlpha(6); 
    } 
} 
+0

Несомненно, есть более простой способ? У кнопок есть родитель или владелец, у которого есть контейнер дочерних компонентов, который можно повторить, нет? –

+0

проверить мое редактирование @MartinJames Я все еще писал ответ –

+2

Кроме того, у компонентов кнопки не появился вспомогательный объект, который можно было бы использовать для хранения счета? –

Смежные вопросы