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

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
#1

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

12.01.2015, 01:45. Просмотров 1263. Ответов 27
Метки нет (Все метки)

Доброй ночи.
Заполняю 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
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
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
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
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
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 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
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
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.01.2015, 13:06     Выбираются все пункты в RadioButton #10
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
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 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
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
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 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
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
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.01.2015, 13:35     Выбираются все пункты в RadioButton #16
Цитата Сообщение от BigOblom Посмотреть сообщение
Их как в коде прописать?
Java
1
tv.setBackground(R.drawable.item_bg_hover);
BigOblom
118 / 118 / 7
Регистрация: 30.06.2010
Сообщений: 435
12.01.2015, 13:35  [ТС]     Выбираются все пункты в RadioButton #17
Spelcrawler, ок. Сейчас попробую переделать.
Spelcrawler
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.01.2015, 13:40     Выбираются все пункты в RadioButton #18
BigOblom, не тот бекграунд написал
Цитата Сообщение от Spelcrawler Посмотреть сообщение
tv.setBackground(R.drawable.item_bg_hover);
Нужно R.drawable.item_list_selector.
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
523 / 493 / 111
Регистрация: 12.03.2014
Сообщений: 1,646
Завершенные тесты: 1
12.01.2015, 13:55     Выбираются все пункты в RadioButton #20
А что там еще есть в строке кроме текста?
Yandex
Объявления
12.01.2015, 13:55     Выбираются все пункты в RadioButton
Ответ Создать тему
Опции темы

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