Пользовательский текст на кнопках переключения не устанавливается при создании фрагмента

Я работаю над фрагментом, который в данный момент содержит три кнопки переключения. В макете фрагментов у меня есть:

        <ToggleButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/corkRdToggle"
            android:layout_below="@+id/imageView2"
            android:layout_alignStart="@+id/imageView2"
            android:layout_marginRight="15dp"
            android:textSize="12sp" />

        <ToggleButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/collegeStToggle"
            android:layout_below="@+id/imageView2"
            android:layout_centerHorizontal="true"
            android:layout_marginLeft="30dp"
            android:layout_marginRight="30dp"
            android:textSize="12sp" />

        <ToggleButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/allRoomsToggle"
            android:layout_below="@+id/imageView2"
            android:layout_alignEnd="@+id/imageView2"
            android:layout_marginLeft="15dp"
            android:textSize="12sp" />

В моих фрагментах метода onViewCreated() я нахожу переключающие кнопки по идентификатору, устанавливаю текст "on" и "off" и активирую одну кнопку:

    corkRdToggle = (ToggleButton) view.findViewById(R.id.corkRdToggle);
    collegeStToggle = (ToggleButton) view.findViewById(R.id.collegeStToggle);
    allRoomsToggle = (ToggleButton) view.findViewById(R.id.allRoomsToggle);

    corkRdToggle.setTextOn("Cork Rd.");
    collegeStToggle.setTextOn("College St.");
    allRoomsToggle.setTextOn("All Rooms");

    collegeStToggle.setTextOff("College St.");
    allRoomsToggle.setTextOff("All Rooms");
    corkRdToggle.setTextOff("Cork Rd.");

    allRoomsToggle.setChecked(true);

И прикрепив к ним слушателей:

    corkRdToggle.setOnClickListener(this);
    collegeStToggle.setOnClickListener(this);
    allRoomsToggle.setOnClickListener(this);

И в моем onClick():

        case R.id.corkRdToggle:
            if(allRoomsToggle.isChecked() || collegeStToggle.isChecked()){
                allRoomsToggle.setChecked(false);
                collegeStToggle.setChecked(false);
            }
            corkRdToggle.setChecked(true);

        break;

        case R.id.collegeStToggle:
            if(allRoomsToggle.isChecked() || corkRdToggle.isChecked()){
                allRoomsToggle.setChecked(false);
                corkRdToggle.setChecked(false);
            }
            collegeStToggle.setChecked(true);

        break;

        case R.id.allRoomsToggle:
            if(corkRdToggle.isChecked() || collegeStToggle.isChecked()){
                corkRdToggle.setChecked(false);
                collegeStToggle.setChecked(false);
            }
            allRoomsToggle.setChecked(true);

        break;

У меня есть три кнопки-переключателя, они связаны с кнопками в макете, текст был включен и выключен, а кнопка "Все комнаты" активна по умолчанию при создании экрана., Какая бы кнопка не была нажата, она станет активной, одновременно отключив обе остальные. Все работает нормально..... кроме исходного состояния. Когда экран создан, кнопка "Все комнаты" действительно активирована и показывает текст, а две другие кнопки переключения показывают только "ВЫКЛ":

Когда экран создан

Нажатие любого из них отключит кнопку "Все комнаты", и на всех кнопках отобразится соответствующий текст:

Правильное отображение текста

Это остается в силе до тех пор, пока используется экран (из-за моего представителя я могу опубликовать только 2 ссылки, поверьте на слово, что он работает).

Однако проблема возвращается, когда я воссоздаю экран. Сделано много, чтобы разобраться в этом, но, похоже, нет никакой информации, касающейся этого конкретно, и мои навыки новичка исчерпаны. Если что-то выскакивает у вас, я очень ценю указатель, спасибо!

2 ответа

Решение

Скорее, чем setOnClickListener(), пытаться setOnCheckChangeListener()

corkRdToggle.setOnCheckChangeListener(this);
collegeStToggle.setOnCheckChangeListener(this);
allRoomsToggle.setOnCheckChangeListener(this);

Я склонен использовать только onClickListener для переключателей, когда я хочу конкретно контролировать, должен ли переключатель действительно переключаться при нажатии (например, я хочу сначала показать предупреждение или что-то еще)

Вам нужно установить setChecked(false) для других кнопок, чтобы установить исходное состояние ВЫКЛ текста.

Другие вопросы по тегам