创建片段时未设置切换按钮上的自定义文本

Custom text on toggle buttons not setting when fragment is created

我目前正在处理一个包含三个切换按钮的片段。在片段布局中,我有:

        <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() 方法中,我通过 id 找到切换按钮,设置 '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;

我有三个切换按钮,它们链接到布局中的按钮,文本已设置为打开和关闭状态,'All Rooms' 按钮已设置为激活状态创建屏幕时的默认值。无论按下哪个按钮都会激活,同时停用其他两个按钮。一切正常......除了初始状态。创建屏幕时 'All Rooms' 按钮确实被激活,并显示文本,但其他两个切换按钮仅显示 'OFF':

When screen is created

按其中任何一个都会停用 'All Rooms' 按钮,并且所有按钮中都会显示正确的文本:

Proper text showing

只要使用屏幕,情况就会一直如此(由于我的代表,我只能 post 2 个链接,相信我的话,它正在工作)。

然而,当我重新创建屏幕时,问题又回来了。对此做了很多调查,但似乎没有任何与此具体相关的信息,而且我的新手技能已经用尽了。如果有任何事情突然发生在您身上,我将非常感谢您的指点,谢谢!

而不是setOnClickListener(),试试setOnCheckChangeListener()

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

我倾向于只使用 onClickListener 进行切换,当我想专门控制切换是否确实应该在点击时切换(例如,我想先显示警告或其他东西)

您需要将setChecked(false)设置为其他按钮以设置初始状态OFF文本。