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

У меня есть 3 переключателя, и как только я нажимаю любую из них, он должен обновить 2 текстовых представления. Одно текстовое представление для имени и другое текстовое представление для цены. Когда я нажимаю переключатель, имя обновляется, но я сталкиваюсь с проблемой, как получить цену товара из массива. У каждого переключателя разные цены.

Код:

     pizzaSizeRadioGroup = (RadioGroup) findViewById(R.id.radioGroup);
        pizzaSizeRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
//                Radio button checked
                sizeSelect = (RadioButton) findViewById(checkedId);
                selectedSize.setText(sizeSelect.getTag().toString());

//                how to display the price from array
                sizePrice = array_price_list[].getItem_price();
                totalPriceDisplay.setText(sizePrice);

            }
        });

Пожалуйста, не публикуйте снимки экрана с кодом, XML или выводом logcat. Пожалуйста, разместите весь текст как текст.

Mike M. 31.10.2018 13:46

У меня недостаточно информации. Вам просто нужно знать, как получить правильный индекс для массива? Потому что я не уверен, что вы здесь делаете: sizePrice = array_price_list []. GetItem_price ();

Gavin Wright 31.10.2018 14:02

@MikeM. Конечно. Спасибо

akm 31.10.2018 14:07

@GavinWright, я обновлю его

akm 31.10.2018 14:08

@GavinWright У меня есть класс предметов, который имеет 2 переменные: имя предмета и цену предмета. я добавил к нему значения, например, этот private Items size_small = new Items ("Small", 5); Я добавляю все значения в массив и теперь хочу выбрать только 3 значения для переключателя

akm 31.10.2018 14:13

Означает ли это, что у вас есть трехэлементный массив, и каждый элемент соответствует одному из трех RadioButton?

Gavin Wright 31.10.2018 14:15

@GavinWright да, каждый элемент в массиве соответствует каждому переключателю. Поэтому, когда выбран переключатель, отображается цена и имя для этого конкретного переключателя.

akm 31.10.2018 14:27

Тогда просто делайте то, что предлагает Захур Салим ниже. Индекс массива - это просто целое число 0, 1 или 2. Таким образом, вы просто устанавливаете переменную int равной 0,1 или 2 в зависимости от того, какой RadioButton нажат.

Gavin Wright 31.10.2018 14:29

Я попытался сделать так, как предложил Захур Салим, но цена в текстовом окне все еще не обновляется

akm 31.10.2018 14:46
0
9
505
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Не совсем понятно, каковы значения в имеющемся у вас ценовом массиве или какова реализация вашего метода getItem_price ().

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

Насколько я понимаю вашу проблему, вы можете использовать два подхода

Подход 1: создать список объекта пиццы с названием, ценой и идентификатором. Установите идентификатор в теге радиокнопки. таким образом вы можете получить имя и цену, используя идентификатор, который вы получите в форме radioButton.getTag ().

Подход 2: Свяжите имя и цену с |, например, size1 | 25, и установите его в теге радиокнопки. Затем вы можете использовать разделение на getTag, чтобы получить имя и цену.

Надеюсь, это поможет вам с вашей проблемой.

У меня есть класс предметов, который имеет 2 переменные: название предмета и цену предмета. я добавил к нему значения, например, этот private Items size_small = new Items ("Small", 5); Я добавляю все значения в массив и теперь хочу выбрать только 3 значения для переключателя

akm 31.10.2018 14:23

Вы можете добавить в свой класс другую переменную с именем id. Затем вы можете установить этот идентификатор в теге переключателя. Получив тег от выбранного переключателя, вы можете использовать этот идентификатор для получения соответствующего имени и цены. Но вам нужно создать радиогруппу динамически и установить тег в своем списке.

Gautam Anand 31.10.2018 14:47
Ответ принят как подходящий

вы можете реализовать переключатель Radiogroup checkedId

pizzaSizeRadioGroup = (RadioGroup) findViewById (R.id.radioGroup);

    pizzaSizeRadioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() 
    {
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            switch(checkedId){
                case R.id.radio0://Radio button id
                    // do operations specific to this selection
                    break;
                case R.id.radio1://Radio button id
                    // do operations specific to this selection
                    break;
                case R.id.radio2://Radio button id
                    // do operations specific to this selection
                    break;
            }   
        }
    });

или отметьте выбранный переключатель

     int selectedId = pizzaSizeRadioGroup.getCheckedRadioButtonId();

как это сделать: int selectedId = pizzaSizeRadioGroup.getCheckedRadioButtonId ();

akm 31.10.2018 14:24

if (selectedid == R1) {array_price_list [0] .getItem_price ();} else if (selectedid == R2) {array_price_list [1] .getItem_price ();} else if (selectedid == R3) {array_price_list [2] .getItem_price ();} и т. д.

Zahoor Saleem 31.10.2018 14:28

Я пробовал сделать это, но текстовое изображение для цены по-прежнему не обновляется

akm 31.10.2018 14:45

поделитесь своим основным классом и файлом xml

Zahoor Saleem 31.10.2018 14:48

делая это с помощью операторов switch case. он отлично работает

akm 31.10.2018 14:54

для этой цели вы можете использовать переключатель, пожалуйста, следуйте этому

radiobuttoncheck.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() 
{
    public void onCheckedChanged(RadioGroup rgroup, int r_id) {
        switch(r_id){
            case R.id.rbid1:
                //show toast here to get idea
                break;
            case R.id.rbid2:

               //show toast here to get idea

                break;
        }   
    }
});

есть ли другой способ сделать это, кроме оператора switch?

akm 31.10.2018 17:10

да, используйте несколько if-s

finki 16.05.2019 13:40

Другие вопросы по теме