【问题标题】:Custom text on toggle buttons not setting when fragment is created创建片段时未设置切换按钮上的自定义文本
【发布时间】:2017-03-08 23:41:24
【问题描述】:

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

        <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;

我有三个切换按钮,它们链接到布局中的按钮,文本已设置为打开和关闭状态,并且“所有房间”按钮已默认设置为在创建画面。无论按下哪个按钮都将变为活动状态,同时停用其他两个按钮。一切正常......除了初始状态。创建屏幕时,“所有房间”按钮确实被激活,并显示文本,但其他两个切换按钮仅显示“关闭”:

When screen is created

按下其中任何一个都会停用“所有房间”按钮,并且正确的文本将显示在所有按钮中:

Proper text showing

只要屏幕被使用,这种情况就会一直存在(由于我的代表,我只能发布 2 个链接,请相信它正在工作)。

但是,当我重新创建屏幕时,问题又回来了。对此进行了很多研究,但似乎没有任何与此相关的信息,而且我的新手技能已经筋疲力尽。如果您有任何问题,我将非常感谢您的指点,谢谢!

【问题讨论】:

  • 您是否尝试过最初在未显示正确初始文本的那些上设置检查(false)?
  • 我刚试过,它奏效了,你这个美女!非常感谢瑞,谢谢!你想把它放在一个答案中,我会接受吗?
  • 刚刚完成,谢谢 =)

标签: java android android-togglebutton


【解决方案1】:

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

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

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

【讨论】:

  • 感谢乔的提示,我会在早上进行调查。我尝试添加 Rui 的建议并解决了我遇到的问题,但如果使用 setOnCheckChangeListener 是更好的做法,我会在充电后尝试重新编写代码。谢谢你的建议:)
  • @Thor IMO 这是标准解决方案,上面的答案只是规避问题,而不是解决问题。 checking 切换应该会触发您的听众,这反过来会取消选中其他切换,从而无需手动调用 setChecked(),因为您已经在听众中这样做了
  • 抱歉花了这么长时间才回来纠正这个问题,我正在快速赶上大学的最后期限,现在才回来再次查看按钮。你是对的乔,这是正确的答案,谢谢!!
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-03
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 2013-12-19
    • 2015-11-28
    • 1970-01-01
    • 2019-07-02
    相关资源
    最近更新 更多