Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
1

Checkbox and RadioButton проверка состояния

09.05.2017, 02:35. Просмотров 1137. Ответов 29
Метки нет (Все метки)

Доброго дня, вечера и ночи!

Заключительная часть: Возможно ли без прописывания слушателя проверить состояние CheckBox по нажатию кнопки: checkbox.isChecked() ?

Основная часть: Все устанавливается и запускается, но при нажатие на кнопку, на телефоне выскакивает, что в приложение обнаружена ошибка. После этого оно закрывается.
Java
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
32
33
34
35
36
37
38
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
 private TextView m;
 private CheckBox chbox;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button;
        CheckBox chbox;
        button = (Button) findViewById(R.id.button);
        chbox = (CheckBox) findViewById(R.id.checkBox);
 
 m = (TextView) findViewById(R.id.text);
    }
 
   
   
 
   
    public void testCheck(View v) {
       
 
       
      
                if (chbox.isChecked())
                   m.setText("Вкл");
                else
                    m.setText("Выкл");
 
    }
}
Вступление: С программированием под андроид знакомлюсь на ходу. Для своих нужд потребовалось создать приложение.Суть такая: на главном экране в виде таблицы порядка 100 кнопок (даже немного побольше) В зависимости от того, какая нажата кнопка, в другом окне (вроде здесь оно называется activity) выводятся данные. Все бы ничего, но эти данные еще зависит от других параметров. Эти параметры я определил под 3 радиокнопки и 2 чекбокса(причем два чекбокса одновременно не должны быть включены и, по крайней мере, один из них был выбран) Итого 6 различных вариантов. Но вот что-то с проверкой состояния не задалось. Для тренировки создал тестовый проект с кнопкой Button и текстовым полем TextView, но и там меня постиг крах. Буду признателен, если мне покажут на мои ошибки и направят на путь истинный
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2017, 02:35
Ответы с готовыми решениями:

Сохранение состояния Checkbox в Listview
Возникла проблема с сохранением состояния checkbox'ов в Listview. Listview...

Как передать сервису состояния checkbox из MainActivity?
Есть service который запускается из MainActivity и в определённое время...

Проверка состояния checkbox
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD>...

Проверка состояния checkbox в datagrid
Есть тест, нужно определить какой вариант ответа выбран в каждом вопросе. Как...

Проверка состояния множества CheckBox наиболее оптимальным способом
Ребят, а как работать с чекбоксами когда их много? Когда он один понятно, If...

29
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,003
09.05.2017, 08:04 2
LexSan, вы перекрыли видимость чекбокса определённого в классе локальным определением - чекбокс определенный в классе остаётся неинициализированным
1
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
09.05.2017, 22:28  [ТС] 3
vxg, спасибо за ответ. Убрал одну строчку "Checkbox chbox" а вот с инициализацией чекбокса - каша в голове. Не могли бы вы подсказать в виде кода?
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,003
09.05.2017, 22:31 4
LexSan, уборки указанной вами строки достаточно
0
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
09.05.2017, 22:40  [ТС] 5
При нажатии на кнопку по прежнему выходит, что в приложение обнаружена ошибка
0
Pablito
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,718
Завершенные тесты: 1
10.05.2017, 10:18 6
1. отформатируй код класса комбинацией ctrl+alt+L
2. выложи обновленный код сюда
3. выложи сюда полный лог ошибки
0
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
10.05.2017, 11:18  [ТС] 7
Паблито,
1 и 2. с работы приду, попробую.
3. Ошибка возникает на уровне выполнения программы. То есть на физическом устройстве все запускается, но когда нажимаю кнопку в активити, которая по сути должна проверять состояние чекбокса, приложение закрывается и нигде логи не записаны. На виртуальном устройстве все зависает и при принудительном закрытие в коде выделена строка if (chbox.isChecked())
0
Vladimir93
64 / 65 / 11
Регистрация: 28.06.2015
Сообщений: 265
10.05.2017, 12:28 8
Все ошибки пишутся в лог. Так что там, будут все.
Пока могу вангануть.
В xlm кнопки button не прописано
XML
1
2
3
<Button
......
    android:onClick="testCheck"></Button>
0
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
10.05.2017, 20:11  [ТС] 9
Vladimir, Вы ошибаетесь. Как раз testCheck у меня прописан в buttone. Иначе, как мне кажется, по нажатию кнопки ничего бы не происходило, так как не вызывался бы метод testCheck

Добавлено через 1 минуту
Код:
Java
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
32
33
34
35
package com.example.fedor.testcheck;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
 
public class MainActivity extends AppCompatActivity {
    private TextView m;
    private CheckBox chbox;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button;
        button = (Button) findViewById(R.id.button);
        chbox = (CheckBox) findViewById(R.id.checkBox);
 
        m = (TextView) findViewById(R.id.text);
    }
 
 
 
    public void testCheck(View v) {
 
 
        if (chbox.isChecked())
            m.setText("Вкл");
        else
            m.setText("Выкл");
 
    }
}
Лог:
05-10 21:04:17.876: E/AndroidRuntime(21122): FATAL EXCEPTION: main
05-10 21:04:17.876: E/AndroidRuntime(21122): java.lang.IllegalStateException: Could not execute method for android:onClick
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293)
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.view.View.performClick(View.java:4109)
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.view.View$PerformClick.run(View.java:17090)
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.os.Handler.handleCallback(Handler.java:615)
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.os.Handler.dispatchMessage(Handler.java:92)
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.os.Looper.loop(Looper.java:153)
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.app.ActivityThread.main(ActivityThread.java:5022)
05-10 21:04:17.876: E/AndroidRuntime(21122): at java.lang.reflect.Method.invokeNative(Native Method)
05-10 21:04:17.876: E/AndroidRuntime(21122): at java.lang.reflect.Method.invoke(Method.java:511)
05-10 21:04:17.876: E/AndroidRuntime(21122): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1032)
05-10 21:04:17.876: E/AndroidRuntime(21122): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:790)
05-10 21:04:17.876: E/AndroidRuntime(21122): at dalvik.system.NativeStart.main(Native Method)
05-10 21:04:17.876: E/AndroidRuntime(21122): Caused by: java.lang.reflect.InvocationTargetException
05-10 21:04:17.876: E/AndroidRuntime(21122): at java.lang.reflect.Method.invokeNative(Native Method)
05-10 21:04:17.876: E/AndroidRuntime(21122): at java.lang.reflect.Method.invoke(Method.java:511)
05-10 21:04:17.876: E/AndroidRuntime(21122): at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
05-10 21:04:17.876: E/AndroidRuntime(21122): ... 11 more
05-10 21:04:17.876: E/AndroidRuntime(21122): Caused by: java.lang.NullPointerException
05-10 21:04:17.876: E/AndroidRuntime(21122): at com.example.fedor.testcheck.MainActivity.testCheck(MainActivity.java:29)
05-10 21:04:17.876: E/AndroidRuntime(21122): ... 14 more
0
Vladimirys
315 / 211 / 28
Регистрация: 16.01.2010
Сообщений: 619
10.05.2017, 20:28 10
Вот оно
Цитата Сообщение от LexSan Посмотреть сообщение
java.lang.IllegalStateException: Could not execute method for android:onClick
Добавлено через 1 минуту
Попробуйте переделать нажатие вот так

Java
1
2
3
4
5
6
7
8
9
 button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
               
        if (chbox.isChecked())
            m.setText("Вкл");
        else
            m.setText("Выкл");
            }
        });
Только поле button определите.

Java
1
2
3
4
5
6
public class MainActivity extends AppCompatActivity {
    private TextView m;
    private CheckBox chbox;
    private Button button;
............................................
}
0
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
10.05.2017, 21:14  [ТС] 11
Vladimirys, button уже исправил, спасибо, но это пример для теста,чтобы разобраться с чекбоксом. В реальном проекте у меня порядка сотни кнопок и на каждую вешать слушателя?

Добавлено через 8 минут
UPD. Error: (29, 34) error: <identifier> expected ругается на .setOnClickListener возможно опять что-то упустил

Добавлено через 16 минут
UPD2 ошибку .setOnClickListener устранил, но все равно при нажатие на кнопку приложение закрывается с ошибкой
0
Vladimir93
64 / 65 / 11
Регистрация: 28.06.2015
Сообщений: 265
11.05.2017, 11:02 12
Цитата Сообщение от LexSan Посмотреть сообщение
public class MainActivity extends AppCompatActivity {
А попробуйте унаследоваться просто от Activity
Java
1
public class MainActivity extends Activity
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
11.05.2017, 11:13 13
Цитата Сообщение от LexSan Посмотреть сообщение
chbox = (CheckBox) findViewById(R.id.checkBox);
ваш чекбокс именно с этим id указан в разметке R.layout.activity_main?
0
Pablito
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,718
Завершенные тесты: 1
11.05.2017, 11:18 14
нужен актуальный код + разметка + лог ошибки
иначе гадать тебе еще долго будут
0
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
11.05.2017, 11:22  [ТС] 15
Vladimir93, спасибо, дома буду пробовать.
demixdn, я его оставил стандартным, каким создала его студия: checkBox
0
demixdn
310 / 255 / 79
Регистрация: 31.10.2016
Сообщений: 619
11.05.2017, 11:26 16
Цитата Сообщение от LexSan Посмотреть сообщение
Caused by: java.lang.NullPointerException
05-10 21:04:17.876: E/AndroidRuntime(21122): at com.example.fedor.testcheck.MainActivity.testCheck(MainActivity.java:29)
лог говорит, что ваш чекбокс null. Поэтому и спрашиваю.
Цитата Сообщение от Паблито Посмотреть сообщение
нужен актуальный код + разметка + лог ошибки
++
0
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
11.05.2017, 11:32  [ТС] 17
Паблито, код я весь выложил. В разметке нет ничего особенного: чекбокс, текствью и кнопка, как студия все создала, разметка RelativeLayout и к кнопке добавил событие android:onClick ="testCheck " Вечером могу выложить
Лог ошибки был выше
0
Pablito
2767 / 2198 / 744
Регистрация: 12.05.2014
Сообщений: 7,718
Завершенные тесты: 1
11.05.2017, 11:37 18
ключевое слово - актуальный код + разметка + лог ошибки
если ты считаешь что там все обычное и смотреть там нечего, что ты забыл на форуме в таком случае? тебе не нужна помощь, сам все знаешь
0
LexSan
2 / 2 / 0
Регистрация: 09.05.2017
Сообщений: 18
11.05.2017, 12:59  [ТС] 19
Паблито, в том то и дело, что я ничего не знаю и если бы знал, то здесь бы меня не было, тем более по такому простейшему вопросу,как работа с элементами. С андроид студио и java я знаком, как неделю. Разметку, как писал выше, выложу вечером, а про "ничего особенного" - надеялся на ваши экстрасенсорные способности, предварительно написав, что за элементы присутствуют

Добавлено через 1 час 7 минут
UPD. Вчера в testCheck убрал полностью все условие . добавил
Java
1
  m.setText("Здесь могла бы быть ваша реклама")
Приложение также завершилось с ошибкой по нажатию кнопки
0
vxg
Модератор
3265 / 2063 / 325
Регистрация: 13.01.2012
Сообщений: 8,003
11.05.2017, 14:50 20
LexSan, я создал новый проект, скопировал в MainActivity ваш код, убрал строчки
Java
1
2
3
Button button;
CheckBox chbox;
button = (Button) findViewById(R.id.button);
закинул на разметку TextView, CheckBox и Button, прописал в Button
XML
1
android:onClick="testCheck"
запустил - все работает - статус галочки корректно обновляется в текстовом поле при нажатии на кнопку. подозреваю что в вашей разметке нет tools:context=".MainActivity"
0
11.05.2017, 14:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2017, 14:50

Запоминание состояния radiobutton'ов
Всем привет! То ли не спал много, то ли действительно сложно. В общем ребята...

Активность TextBox в зависимости от состояния Radiobutton
Помогите пожайлуйста, есть 2 радиобатона, текстбокс, одна кнопка,нужно чтобы...

Как сделать проверку состояния RadioButton?
Как сделать проверку на Radiobutton(chacked)?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru