Не устанавливается значение AtomicInteger

Рейтинг: 0Ответов: 1Опубликовано: 21.01.2023

Хочу задать действия для массива кнопок через switch/case, но по сколько через лямбду при выборе кнопки нельзя задать значение для int переменной, чтоб потом обратиться к массиву. Поэтому устанавливаю через AtomicInteger, код ниже.

Установка числа:

AtomicInteger e = new AtomicInteger(0);

            button_1.setOnClickListener(view -> e.set(0));
            button_2.setOnClickListener(view -> e.set(1));

Действие через switch/case

switch(views.get(e.get())){
                case(R.id.button_1):{
                    // действие
                    break;
                }
                case(R.id.button_2):{
                    //действие
                    break;
                }
            }

Ну и массив кнопок, если это поможет

ArrayList<Integer> views = new ArrayList<>();
        views.add(R.id.button_1);
        views.add(R.id.button_2);

Изначально, как и нужно выбрана первая кнопка, но когда нажимаю на вторую, выбрана всё ещё первая. Как можно решить проблему?

Ответы

▲ 0

Создай отдельный экземпляр AtomicInteger для каждой кнопки и добавь его в массив views вместе с ID кнопки.

ArrayList<Integer> views = new ArrayList<>();
AtomicInteger e1 = new AtomicInteger(0);
AtomicInteger e2 = new AtomicInteger(1);

views.add(R.id.button_1);
views.add(e1);
views.add(R.id.button_2);
views.add(e2);

button_1.setOnClickListener(view -> e1.set(0));
button_2.setOnClickListener(view -> e2.set(1));

через switch/case:

switch(views.get(e1.get())){
                case(R.id.button_1):{
                    // действие
                    break;
                }
                case(R.id.button_2):{
                    //действие
                    break;
                }
            }

или так

switch(views.get(e2.get())){
                case(R.id.button_1):{
                    // действие
                    break;
                }
                case(R.id.button_2