Форум программистов, компьютерный форум CyberForum.ru

Выбираются все пункты в RadioButton - Android

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 01:45     Выбираются все пункты в RadioButton #1
Доброй ночи.
Заполняю ListView строками, состоящими из RadioButton. Загружается все хорошо, но выбирать можно хоть все пункты, снимать нельзя.
Вот код getView
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
 
        View view = convertView;
 
        if (convertView==null){
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            // задаем вид элемента списка, который мы создали выше
            view = inflater.inflate(R.layout.answer_item_radio, null);
        }
 
        // проставляем данные для элементов
        RadioButton radioButton = (RadioButton)view.findViewById(R.id.radioButton);
 
        // получаем элемент со списка
        Answers answersItem = data.get(position);
 
        // устанавливаем значения компонентам одного элемента списка
        radioButton.setText(answersItem.getAnswer());
        radioButton.setTag(answersItem._Id);
 
        return view;
    }
На слое answer_item_radio лежит один RadioButton
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/radioGroup"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal">
 
 
        <RadioButton
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="New RadioButton"
            android:id="@+id/radioButton"
            android:layout_gravity="center_horizontal"
            android:checked="false" />
    </RadioGroup>
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
semiromid
 Аватар для semiromid
7 / 7 / 2
Регистрация: 28.08.2014
Сообщений: 177
12.01.2015, 02:55     Выбираются все пункты в RadioButton #2
Рабочий вариант, попробуйте.

XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<RadioGroup
        android:id="@+id/radioGroup1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:orientation="vertical" >
 
        <RadioButton
            android:id="@+id/radioButton1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:text="1"
            android:textSize="20sp" />
 
        <RadioButton
            android:id="@+id/radioButton2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="20dp"
            android:text="2"
            android:textSize="20sp" />
 
        <RadioButton
            android:id="@+id/radioButton3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="3"
            android:textSize="20sp" />
    </RadioGroup>
Добавлено через 5 минут
То есть в каждой ячейке ListView всего один RadioButton? Если он один он и не будет влиять на другие RadioButton.

Добавлено через 2 минуты
Если это так и есть, то Вам лучше сделать кнопками. Это я так думаю.
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 09:33  [ТС]     Выбираются все пункты в RadioButton #3
semiromid, у меня их несколько, подгружаются через getView. В конечном итоге, схема должна получиться как у вас.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
12.01.2015, 09:37     Выбираются все пункты в RadioButton #4
BigOblom, чё-то ты перемудрил...

Если у тебя единичный выбор ответа, то мог радиобаттоны и не использовать, а опять же просто повесить на листвью AdapterView.OnItemClickListener и отработать onItemClick.

Если множественный выбор, то нужны CheckBox.
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 09:41  [ТС]     Выбираются все пункты в RadioButton #5
Armagedo, ну у меня они разные, могут быть единичные, могут из нескольких вариантов. Мне же надо при нажатии еще показать, что пункт выбран, бэкграунд поменять у элемента. А в случае с множественным выбором, 1 раз нажал, подсветилось, 2й раз нажал убралась подсветка.
Armagedo
208 / 208 / 60
Регистрация: 22.08.2014
Сообщений: 644
12.01.2015, 09:55     Выбираются все пункты в RadioButton #6
Мысли вслух...
Вводи доп. атрибут для вопроса - допускается ли множественный выбор ответов.
Если да - формируешь список на основе лэйаута элемента списка, который с чекбоксами.

Если нет - с радиобаттонами. Но радиобаттоны придется обслуживать самому. Нажал в одном месте - убил в других местах.
Но с этим возможен гемор, как я почитаю
Второй вариант здесь, кмк - это использовать не список, а RadioGroup внутри ScrollView...
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 12:15  [ТС]     Выбираются все пункты в RadioButton #7
Armagedo, что то не хочется мне с RadioButtons возиться) Как то можно это сделать с имеющимися TextView? Например при клике менять фон, при повторном клике возвращать фон в исходное положение.
Пробую как то так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
lvQuestions.setOnItemClickListener( new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
 
                if(isMulti == false) { //если нужен одиночный выбор
                    view.setBackgroundColor(Color.YELLOW);
                    isMulti = true;
                }
                else {
                    view.setBackgroundColor(Color.BLUE); //тут как то нужно установить стандартный фон
                    isMulti = true;
                }
            }
        });
Рабочий такой способ?

Добавлено через 40 минут
Вот так нормально меняет цвет, но не у одного item. Если например я нажал на первый, он подкрасился, нажал на второй, первый итем остается с подсветкой, а ко второму применяется прозрачность. Жму на третий, к нему снова применяется подсветка. Нужно как то по ид привязаться. Это я пока пробую реализовать список с одиночным выбором.

Добавлено через 20 секунд
Java
1
2
3
4
5
6
7
8
9
if(isMulti == false) {
                    view.setBackgroundColor(Color.rgb(22, 179, 147));
                    isMulti = true;
                }
 
                else {
                    view.setBackgroundColor(Color.TRANSPARENT);
                    isMulti = false;
                }
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
12.01.2015, 12:54     Выбираются все пункты в RadioButton #8
BigOblom, немножко допишите класс TextView:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 public class MyTextView extends TextView {
 
        private boolean isActivated = false;
 
        public myTextView(Context context) {
            super(context);
        }
 
        public myTextView(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
 
        public myTextView(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
 
        public void switchState(){
            isActivated = !isActivated;
            setBackgroundColor(isActivated ? activatedColor : deactivatedColor);
        }       
 
    }
и потом в OnItemClickListener:
Java
1
((MyTextView)view).switchState;
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 13:04  [ТС]     Выбираются все пункты в RadioButton #9
Spelcrawler, при нажатии критует.
В отладке посмотрел, критует в файле ZygoteInit.java на строке pid
Java
1
2
3
4
5
6
7
8
9
static native int setregid(int rgid, int egid);
 
    /**
     * Invokes the linux syscall "setpgid"
     *
     * @param pid pid to change
     * @param pgid new process group of pid
     * @return 0 on success or non-zero errno on fail
     */
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
12.01.2015, 13:06     Выбираются все пункты в RadioButton #10
BigOblom, не может этот код там критовать. Где то еще должна быть ошибка.
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 13:08  [ТС]     Выбираются все пункты в RadioButton #11
Spelcrawler, вот текст ошибки
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to ru.hexff.createdb.QuestionsActivity$myTextView
    at ru.hexff.createdb.QuestionsActivity$1.onItemClick(QuestionsActivity.java:149)
    at android.widget.AdapterView.performItemClick(AdapterView.java:299)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1129)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2927)
    at android.widget.AbsListView$3.run(AbsListView.java:3676)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5047)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)
    at dalvik.system.NativeStart.main(Native Method)
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
12.01.2015, 13:14     Выбираются все пункты в RadioButton #12
XML
1
java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to ru.hexff.createdb.QuestionsActivity$myTextView
вот ошибка - кастуете на myTextView RelativeLayout.
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 13:23  [ТС]     Выбираются все пункты в RadioButton #13
Spelcrawler, ну разметка lyout, который я использую в адаптере такая
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@drawable/item_list_selector">
 
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView"
        android:clickable="false"
        android:focusable="false"
        android:padding="@dimen/abc_action_bar_icon_vertical_padding_material"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="0dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentEnd="true"
        android:textSize="@dimen/abc_text_size_medium_material" />
</RelativeLayout>
Попробовал сделать так
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class myRelativeLayout extends RelativeLayout {
 
        private boolean isActivated = false;
 
        public myRelativeLayout(Context context) {
            super(context);
        }
 
        public myRelativeLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
 
        public myRelativeLayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
 
        public void switchState(){
            isActivated = !isActivated;
            setBackgroundColor(isActivated ? Color.rgb(22, 179, 147) : Color.TRANSPARENT);
        }
    }
Не катит. Ошибку выдает такую
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
java.lang.ClassCastException: android.widget.RelativeLayout cannot be cast to ru.hexff.createdb.QuestionsActivity$myRelativeLayout
    at ru.hexff.createdb.QuestionsActivity$1.onItemClick(QuestionsActivity.java:150)
    at android.widget.AdapterView.performItemClick(AdapterView.java:299)
    at android.widget.AbsListView.performItemClick(AbsListView.java:1129)
    at android.widget.AbsListView$PerformClick.run(AbsListView.java:2927)
    at android.widget.AbsListView$3.run(AbsListView.java:3676)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5047)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:807)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:623)
    at dalvik.system.NativeStart.main(Native Method)
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
12.01.2015, 13:29     Выбираются все пункты в RadioButton #14
А зачем оборачивать единственный TextView в RelativeLayuot? Сделайте сразу так:
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<ru.hexff.createdb.QuestionsActivity.myTextViev
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/textView"
        android:clickable="false"
        android:focusable="false"
        android:padding="@dimen/abc_action_bar_icon_vertical_padding_material"
        android:layout_alignParentLeft="true"
        android:layout_marginLeft="0dp"
        android:layout_alignParentTop="true"
        android:layout_marginTop="0dp"
        android:layout_alignParentEnd="true"
        android:textSize="@dimen/abc_text_size_medium_material" />
Да зачем вообще разметка, параметров минимум - назначьте их в коде, проблем меньше будет.
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 13:32  [ТС]     Выбираются все пункты в RadioButton #15
Spelcrawler, у меня еще на нем стоят такие стили
item_list_selector.xml
XML
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Когда по элементу списка нажали применять item_bg_hover.xml -->
    <item android:drawable="@drawable/item_bg_hover"
        android:state_pressed="true" />
 
    <!-- Когда стоит фокус на элементе списка то применить item_bg_hover.xml -->
    <item android:drawable="@drawable/item_bg_hover"
        android:state_focused="true" />
</selector>
item_bg_hover.xml
XML
1
2
3
4
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle" >
    <solid android:color="#ff16b393" />
</shape>
Их как в коде прописать?
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
12.01.2015, 13:35     Выбираются все пункты в RadioButton #16
Цитата Сообщение от BigOblom Посмотреть сообщение
Их как в коде прописать?
Java
1
tv.setBackground(R.drawable.item_bg_hover);
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 13:35  [ТС]     Выбираются все пункты в RadioButton #17
Spelcrawler, ок. Сейчас попробую переделать.
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
12.01.2015, 13:40     Выбираются все пункты в RadioButton #18
BigOblom, не тот бекграунд написал
Цитата Сообщение от Spelcrawler Посмотреть сообщение
tv.setBackground(R.drawable.item_bg_hover);
Нужно R.drawable.item_list_selector.
BigOblom
 Аватар для BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 13:44  [ТС]     Выбираются все пункты в RadioButton #19
Spelcrawler, ага. Я уже попробовал. и вместо
Java
1
tv.setBackground
нужно
Java
1
tv.setBackgroundResource
Добавлено через 2 минуты
Spelcrawler, сделал. Подсвечивается не вся строка, а только где есть текст.
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:background="@drawable/item_list_selector"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:text="Large Text"
    android:id="@+id/textView"
    android:clickable="false"
    android:focusable="false"
    android:padding="@dimen/abc_action_bar_icon_vertical_padding_material"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="0dp"
    android:layout_alignParentTop="true"
    android:layout_marginTop="0dp"
    android:layout_alignParentEnd="true"
    android:textSize="@dimen/abc_text_size_medium_material" />
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.01.2015, 13:55     Выбираются все пункты в RadioButton
Еще ссылки по теме:

Android Передать данные из radiobutton
Google Android RadioButton Android
Android Картинки в RadioButton-е
API 24 и RadioButton Android
Вставит пункты меню в фрагмент Android

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Spelcrawler
521 / 491 / 110
Регистрация: 12.03.2014
Сообщений: 1,641
Завершенные тесты: 1
12.01.2015, 13:55     Выбираются все пункты в RadioButton #20
А что там еще есть в строке кроме текста?
Yandex
Объявления
12.01.2015, 13:55     Выбираются все пункты в RadioButton
Ответ Создать тему
Опции темы

Текущее время: 09:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru