#android #string #if-statement #button #checkbox
Вопрос:
Просто хочу начать с того, что я довольно новичок в кодировании для Android, но я стараюсь изо всех сил.
То, что я пытаюсь сделать, — это получить несколько результатов, когда установлено несколько флажков. его довольно сложно объяснить, код может помочь немного больше
public class MainActivity extends AppCompatActivity{
Checkbox cb1, cb2;
Button b1, b2, b3, b4, b5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cb1 = (findViewById(R.id.cb1);
cb2 = (findViewById(R.id.cb2);
b1 = (findViewById(R.id.b1);
b2 = (findViewById(R.id.b2);
b3 = (findViewById(R.id.b3);
b4 = (findViewById(R.id.b4);
b5 = (findViewById(R.id.b5);
}
@Override
public void onCheckedChanged (CompoundButton buttonView,boolean isChecked) {
if (cb1.isChecked()) {
b1.setBackgroundColor(ContextCompat.getColor(this, R.color.grey));
b2.setBackgroundColor(ContextCompat.getColor(this, R.color.grey));
b3.setBackgroundColor(ContextCompat.getColor(this, R.color.grey));
}
if (cb2.isChecked()) {
b3.setBackgroundColor(ContextCompat.getColor(this, R.color.grey));
b4.setBackgroundColor(ContextCompat.getColor(this, R.color.grey));
b5.setBackgroundColor(ContextCompat.getColor(this, R.color.grey));
}
else {
b1.setBackgroundColor(ContextCompat.getColor(this, R.color.green));
b2.setBackgroundColor(ContextCompat.getColor(this, R.color.green));
b3.setBackgroundColor(ContextCompat.getColor(this, R.color.green));
b4.setBackgroundColor(ContextCompat.getColor(this, R.color.green));
b5.setBackgroundColor(ContextCompat.getColor(this, R.color.green));
}
}
итак, в основном я пытаюсь сделать так, чтобы, если установлен только флажок 1, мы видели, как меняется фон кнопок 1-3, и если нажимается только флажок 2, то меняются кнопки 3-5, а если нажимаются обе, то меняются все кнопки. Этого я добиваюсь без проблем.
Проблема, с которой я сталкиваюсь, заключается в том, чтобы заставить их вернуться. так, например, скажем, у меня есть оба флажка cb1 и 2, затем я снимаю флажок cb2, поле остается таким, как если бы cb1 и 2 были нажаты, я пытаюсь получить его, поэтому, когда cb2 снят, возвращается результат только для проверки cb1 (кнопки 4 и 5 снова станут зелеными).
Я проверил это по всему Интернету и не могу найти ответ или хотя бы путь, который указал бы мне в правильном направлении.
Я попытался использовать настройку «переключатель/корпус», которая не сработала (выяснил, почему после), затем я попытался замкнуть переключатель, снова не сработало. Я попытался использовать оператор else if, а затем обнаружил, что это в основном то же самое, что и переключатель, о котором я думал, возможно, с использованием строкового массива, но я не уверен на 100%, что это даст желаемый результат.
У меня все еще есть код от неудачной попытки переключения/обращения, если это необходимо
Комментарии:
1. Я предлагаю установить точку останова внутри
onCheckedChanged()
и запустить ваше приложение в отладчике Android Studio. Затем вы можете просмотреть код, чтобы увидеть, что происходит.2. Кроме того, для этого нет причин
ContextCampt.getColor()
, вы можете просто сделатьsetBackgroundColor(R.color.grey)
.3. Подсказка: используйте два отдельных
if...else
утверждения, а не пытайтесь каким-то образом их объединить.4. Я попытался использовать 2 отдельных оператора if else, по какой-то причине он продолжал пропускать первый оператор if else, когда был установлен флажок cb1, все кнопки оставались зелеными, но когда я добавил в него cb2, код для запуска обоих был там
5. Ах ладно, я попробую, я думал, что это было бы, если бы другие заявления, которые я просто не мог заставить работать, я верну их в таком виде и посмотрю, что я могу заставить работать