Как изменить isChecked в динамически создаваемых Switch?

Интерфейс, диалоги, темы, стили, меню
Ответить
YeS
Сообщения: 3
Зарегистрирован: 22 июн 2016, 01:44

Как изменить isChecked в динамически создаваемых Switch?

Сообщение YeS » 22 июн 2016, 02:07

Добрый день.
Подскажите пожалуйста начинающему. Нужно программно менять свойство isChecked в динамически созданных элементах Switch. Код фрагмента в котором создаются переключатели такой:

Код: Выделить всё

package com.cyberpole.myproject1;

import android.content.Context;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;
import android.widget.Switch;
import android.widget.TextView;

public class LightingsFragment extends Fragment {
    TextView textMsg;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        // Динамическое создание элементов фрагмента
        Context context = getActivity().getApplicationContext();
        RelativeLayout layout = new RelativeLayout(context);
        int wrapContent = RelativeLayout.LayoutParams.WRAP_CONTENT;
        int matchParent = RelativeLayout.LayoutParams.MATCH_PARENT;

        RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(wrapContent, matchParent);

        textMsg = new TextView(context);
        textMsg.setId(layout.getId()+500);
        textMsg.setTextSize(20);
        textMsg.setTextColor(Color.BLACK);
        layout.addView(textMsg, layoutParams);
        int previousTextViewId = textMsg.getId();

        for (int i = 0; i < MainActivity.maxRoomCount; i++){
            RelativeLayout.LayoutParams layoutParamsOfText = new RelativeLayout.LayoutParams(wrapContent, wrapContent);
            RelativeLayout.LayoutParams layoutParamsOfSwitch = new RelativeLayout.LayoutParams(wrapContent, wrapContent);
            // Добавляем текстовое поле слева
            layoutParamsOfText.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
            layoutParamsOfText.topMargin = 60 + i*50;

            TextView roomName = new TextView(context);
            roomName.setId(1002 + i);
            previousTextViewId = roomName.getId();
            roomName.setGravity(RelativeLayout.CENTER_VERTICAL);
            roomName.setText(MainActivity.configRooms[i]);

            roomName.setTextSize(20);
            roomName.setLayoutParams(layoutParamsOfText);
            layout.addView(roomName);

            // Добавляем переключатель Switch
            int alignParentRight = RelativeLayout.ALIGN_PARENT_RIGHT;

            layoutParamsOfSwitch.addRule(alignParentRight);
            layoutParamsOfSwitch.addRule(RelativeLayout.ALIGN_BASELINE, previousTextViewId);
            layoutParamsOfSwitch.addRule(RelativeLayout.ALIGN_RIGHT, previousTextViewId);

            Switch switch1 = new Switch(context);
            switch1.setId(2002 + MainActivity.configOutputs[0][i]);
            switch1.setTextColor(Color.BLACK);
            switch1.setLayoutParams(layoutParamsOfSwitch);

            layout.addView(switch1);
        }

        Bundle bundle = getArguments();
        if (bundle != null) {
            String msg = bundle.getString(MainActivity.KEY_MSG_LIGHTINGS);
            if (msg != null) {
                textMsg.setText(msg);
            }
        }
        return layout;
    }

    // Вывод текста в заголовок фрагмента
    public void setMsg(String msg){
        textMsg.setText(msg);
    }
}
В зависимости от меняющегося по таймеру значения некоторой переменной нужно менять состояния переключателей. При создании свичей задаю им id программно, поэтому получается id нужных элементов известны. Но как это можно после вывода элементов на экран программно менять свойство isChecked мне не приходит в голову. Помогите пожалуйста.

NightScream
Сообщения: 35
Зарегистрирован: 22 фев 2015, 23:18

Re: Как изменить isChecked в динамически создаваемых Switch?

Сообщение NightScream » 22 июн 2016, 13:05

CheckBox checkBox = new CheckBox(this);
checkBox.setChecked(true);

YeS
Сообщения: 3
Зарегистрирован: 22 июн 2016, 01:44

Re: Как изменить isChecked в динамически создаваемых Switch?

Сообщение YeS » 22 июн 2016, 15:14

NightScream писал(а):CheckBox checkBox = new CheckBox(this);
checkBox.setChecked(true);
не смешно.

Задавать setChecked требуется уже ПОСЛЕ того как все checkBox'ы созданы.
Вопрос то в том, как задать setChecked если компоненты уже созданы, причём в цикле типа:

Код: Выделить всё

for (int i = 0; i < MainActivity.maxRoomCount; i++){
Switch switch1 = new Switch(context);
switch1.setTextColor(Color.BLACK);
switch1.setLayoutParams(layoutParamsOfSwitch);
layout.addView(switch1);
}
вот они создались в цикле, отображены в активити. И как с ними можно сделать switch1.setChecked(true) если они все 10 штук или больше создавались под именем switch1 ?

YeS
Сообщения: 3
Зарегистрирован: 22 июн 2016, 01:44

Re: Как изменить isChecked в динамически создаваемых Switch?

Сообщение YeS » 22 июн 2016, 15:35

Проблему решил создав массив в основном активити

Код: Выделить всё

public static Switch[] switches = new Switch[maxRoomCount];

Код: Выделить всё

MainActivity.switches[i] = new Switch(context);
MainActivity.switches[i].setText(MainActivity.configRooms[i]);
MainActivity.switches[i].setTextColor(Color.BLACK);
MainActivity.switches[i].setGravity(RelativeLayout.CENTER_VERTICAL);
MainActivity.switches[i].setTextSize(20);
MainActivity.switches[i].setLayoutParams(layoutParamsOfSwitch);
layout.addView(MainActivity.switches[i]);
таким образом теперь все объекты хранятся в массиве и их свойства можно менять зная их порядковый номер в массиве.

NightScream
Сообщения: 35
Зарегистрирован: 22 фев 2015, 23:18

Re: Как изменить isChecked в динамически создаваемых Switch?

Сообщение NightScream » 22 июн 2016, 16:56

YeS писал(а):
NightScream писал(а):CheckBox checkBox = new CheckBox(this);
checkBox.setChecked(true);
не смешно.

Задавать setChecked требуется уже ПОСЛЕ того как все checkBox'ы созданы.
Вопрос то в том, как задать setChecked если компоненты уже созданы, причём в цикле типа:

Код: Выделить всё

for (int i = 0; i < MainActivity.maxRoomCount; i++){
Switch switch1 = new Switch(context);
switch1.setTextColor(Color.BLACK);
switch1.setLayoutParams(layoutParamsOfSwitch);
layout.addView(switch1);
}
вот они создались в цикле, отображены в активити. И как с ними можно сделать switch1.setChecked(true) если они все 10 штук или больше создавались под именем switch1 ?
Я ответил на твой вопрос, ты не умеешь правильно задавать вопросы.

Ответить