Android can';t以编程方式更改切换按钮

Android can';t以编程方式更改切换按钮,android,togglebutton,Android,Togglebutton,我似乎无法编程——我将ToggleButton设置为off(false)——我已经做了很多搜索和尝试,但就是无法让它工作。相关代码在这里显示- while (toggleButton4_.isChecked()){ seekBar_.setProgress(0); toggleButton2_.setSelected(false); pwmOutput1_.setDutyCycle(0); pwmOutput2_.setPulseWidth(500); }

我似乎无法编程——我将ToggleButton设置为off(false)——我已经做了很多搜索和尝试,但就是无法让它工作。相关代码在这里显示-

  while (toggleButton4_.isChecked()){
seekBar_.setProgress(0);
toggleButton2_.setSelected(false);  
pwmOutput1_.setDutyCycle(0);        
pwmOutput2_.setPulseWidth(500);     
  }
seekbar设置为零ok,两个pwm输出分别变为零和500,但切换按钮及其引脚不变

我很高兴能得到任何帮助,越简单越好,因为我是java的初学者

谢谢,肯

更新-我也尝试了toggle(),结果相同,所以您是正确的,其他地方一定有错误。以下是我的应用程序的全部主要活动-

    package ioio.examples.hello;


import ioio.lib.api.DigitalInput;
import ioio.lib.api.DigitalOutput;
import ioio.lib.api.DigitalOutput.Spec.Mode;
import ioio.lib.api.PwmOutput;
import ioio.lib.api.exception.ConnectionLostException;
import ioio.lib.util.BaseIOIOLooper;
import ioio.lib.util.IOIOLooper;
import ioio.lib.util.android.IOIOActivity;
import kens.tws.R;
import android.content.pm.ActivityInfo;
import android.os.Bundle;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.ToggleButton;



public class MainActivity extends IOIOActivity {
    private Button button1_;
        private Button button2_;
    private SeekBar seekBar_;
    private ToggleButton toggleButton1_;
    private ToggleButton toggleButton2_;
    private ToggleButton toggleButton3_;
    private ToggleButton toggleButton4_;

        /**
     * Called when the activity is first created. Here we normally initialize
     * our GUI.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_NOSENSOR);


        seekBar_ = (SeekBar) findViewById(R.id.seekBar1);
        toggleButton1_ = (ToggleButton) findViewById(R.id.frButton);
        toggleButton2_ = (ToggleButton) findViewById(R.id.fieldButton);
        toggleButton3_ = (ToggleButton) findViewById(R.id.lightsButton);
        toggleButton4_ = (ToggleButton) findViewById(R.id.emBrakeButton);
        button1_ = (Button) findViewById(R.id.engineStartButton);
        button2_ = (Button) findViewById(R.id.hornButton);

    }

    /**
     * This is the thread on which all the IOIO activity happens. It will be run
     * every time the application is resumed and aborted when it is paused. The
     * method setup() will be called right after a connection with the IOIO has
     * been established (which might happen several times!). Then, loop() will
     * be called repetitively until the IOIO gets disconnected.
     */
    class Looper extends BaseIOIOLooper {

        private DigitalOutput engineStartButton_;
        private DigitalOutput hornButton_;
        private DigitalOutput fieldButton_;
        private DigitalOutput frButton_;
        private DigitalOutput lightsButton_;
        private DigitalOutput emBrakeButton_;
        private PwmOutput pwmOutput1_;
        private PwmOutput pwmOutput2_;
        private final int brakeOnPin = 18 ;
        private DigitalInput brakeOn ;

        /**
         * Called every time a connection with IOIO has been established.
         * Typically used to open pins.
         * 
         * @throws ConnectionLostException
         *             When IOIO connection is lost.
         * 
         * @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#setup()
         */
        @Override
        protected void setup() throws ConnectionLostException {
            engineStartButton_ = ioio_.openDigitalOutput(3, false);
            hornButton_ = ioio_.openDigitalOutput(6, false);
            frButton_ = ioio_.openDigitalOutput(14, false);
            fieldButton_ = ioio_.openDigitalOutput(11, false);
            lightsButton_ = ioio_.openDigitalOutput(13, false);
            emBrakeButton_ = ioio_.openDigitalOutput(16, false);
            pwmOutput1_ = ioio_.openPwmOutput(5, 100);  //alternator field control
            pwmOutput2_ = ioio_.openPwmOutput(new DigitalOutput.Spec(10, Mode.OPEN_DRAIN), 100); //throttle servo
            brakeOn = ioio_.openDigitalInput(brakeOnPin, DigitalInput.Spec.Mode.PULL_UP);
            }


        /**
         * Called repetitively while the IOIO is connected.
         * @throws ConnectionLostException
         *             When IOIO connection is lost.
         * 
         * @see ioio.lib.util.AbstractIOIOActivity.IOIOThread#loop()
         */

    @Override
    public void loop() throws ConnectionLostException {
        pwmOutput1_.setPulseWidth(seekBar_.getProgress() * 100);  //alternator field
        pwmOutput2_.setPulseWidth(500 + seekBar_.getProgress() * 14);  //engine throttle
        engineStartButton_.write(button1_.isPressed());
        hornButton_.write(button2_.isPressed());
        frButton_.write(!toggleButton1_.isChecked());
        fieldButton_.write(toggleButton2_.isChecked());
        lightsButton_.write(toggleButton3_.isChecked());
        //  emBrakeButton_.write(toggleButton4_.isChecked());

        while (toggleButton4_.isChecked()){
        // Emergency brake is on, so turn field relay off, zero seekbar, set field switch
        //  to off, and set both pwm's to zero. 
            seekBar_.setProgress(0);
            fieldButton_.write(false);
            toggleButton2_.setChecked(false);  //alternator field switch
            pwmOutput1_.setDutyCycle(0);        //alternator field winding pwm
            pwmOutput2_.setPulseWidth(500);     //engine throttle servo 
        }  

        try {
                if (!brakeOn.read()) {
                   // brake pin is pulled low, so zero pwm and seekBar
                    seekBar_.setProgress(0);
                    pwmOutput1_.setDutyCycle(0);
                    pwmOutput2_.setPulseWidth(500);
                }

            } catch (InterruptedException e) {
                // do nothing
            }
          try {
            Thread.sleep(100);
        } catch (InterruptedException e) {
        }
    }


    } // End class Looper
    /**
     * A method to create our IOIO thread.
     * 
     * @see ioio.lib.util.AbstractIOIOActivity#createIOIOThread()
     */
        @Override
        protected IOIOLooper createIOIOLooper() {

            return new Looper();
        }


    } // End class MainActivity
另外,下面是相关按钮的xml-

  <ToggleButton
    android:id="@+id/fieldButton"
    android:layout_width="100dp"
    android:layout_height="100dp"
    android:layout_column="0"
    android:layout_gravity="center_horizontal|top"
    android:layout_row="0"
    android:background="@drawable/field_button_toggle"
    android:checked="false"
    android:text="@string/field"
    android:textOff="@string/field_off"
    android:textOn="@string/field_on" />

我还使用colors.xml

    <?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="red">#ff0000</color>
    <color name="green">#00ff00</color>
    <color name="blue">#0000ff</color>
    <color name="orange">#ff8800</color>
    <color name="white">#ffffff</color>
</resources>

#ff0000
#00ff00
#0000ff
#ff8800
#ffffff
另一个xml用于可绘制的字段按钮-

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="false" android:drawable="@color/green"  />
    <item android:state_checked="true" android:drawable="@color/red"  />
</selector>

谢谢,我真的很感激你为我所做的一切, 肯。

你要找的是:

toggleButton2_.setChecked(false);
改用这个:

if (toggleButton4_.isChecked()){
  seekBar_.setProgress(0);
  toggleButton2_.setChecked(false);  
  pwmOutput1_.setDutyCycle(0);        
  pwmOutput2_.setPulseWidth(500);     
  }

干杯:)

你要做的就是使用:(1)

所以看起来是这样的:

while (toggleButton4_.isChecked()){
    seekBar_.setProgress(0);
    toggleButton2_.setChecked(false);  
    pwmOutput1_.setDutyCycle(0);         
    pwmOutput2_.setPulseWidth(500);     
}
但我不明白你的循环。它是无限的。使用
if
代替
while
。因此,最终它将变成:(2)


但这取决于你在做什么。这两件事应该能解决问题。

上面的代码中有两个不同的切换按钮,这是故意的吗?
while(toggleButton4.isChecked())
这个循环什么时候开始循环
中断
?是的,在我看来像是一个无限循环。:)并使用
toggleButton2_u2;setChecked(false);)谢谢你们的建议。为了澄清问题,该应用程序将控制我的一辆微型机车(请参阅electric1.htm谢谢各位的建议。为了澄清问题,该应用程序将控制我的一辆微型机车(请参阅本页底部的红色机车electric1.htm).ToggleButton4是紧急停止按钮,pwm2是发动机油门,pwm1控制交流发电机,togglebutton2操作交流发电机电路中的继电器。此循环的目的是当按下紧急停止按钮时,所有东西都会关闭,直到紧急停止按钮被切换。我尝试将其更改为。setChecked,它没有改变nge切换按钮2,但我确实失去了对应用程序的控制。如果需要,我可以发布更多的代码,但作为一名排名初学者,我不确定需要哪些位来帮助诊断我做错了什么。为了进一步澄清,我尝试了这两种建议-更改为.setChecked(false);并从while更改为if。两者都没有产生预期的效果。使用.setChecked更改,按钮在视觉上与以前一样工作,但没有从硬件中产生任何输出。要么更改回set.Selected,要么注释掉该行,使硬件重新工作。我花了一周半的时间试图解决这一问题-我很高兴能把整个项目放到我的网站上,如果它有助于找出我做错了什么的话。你可以试试
.toggle()
。我试过使用两个togglebutton和isChecked()和setChecked()。他们正在工作。请更新您的问题,以包含使用您发布的代码的代码。可能还有其他错误。
while (toggleButton4_.isChecked()){
    seekBar_.setProgress(0);
    toggleButton2_.setChecked(false);  
    pwmOutput1_.setDutyCycle(0);         
    pwmOutput2_.setPulseWidth(500);     
}
if (toggleButton4_.isChecked()){
    seekBar_.setProgress(0);
    toggleButton2_.setChecked(false);  
    pwmOutput1_.setDutyCycle(0);         
    pwmOutput2_.setPulseWidth(500);     
}