0

我的应用程序中有一些切换按钮,我在第一次运行时将切换按钮的状态设置为 true。问题是,当我尝试设置 false(按钮关闭)时,它显示它已更改状态为false,但关闭时要执行的操作未执行。当我再次单击按钮打开和关闭时,按钮将再次打开和关闭,然后按钮时要执行的操作关闭将正常执行。我不知道第一次发生了什么?有人可以帮我找出这段代码的问题吗?请原谅我的语言。
这里我粘贴这个问题的示例代码

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    ToggleButton tb1=(ToggleButton)findViewById(R.id.toggleButton1);
    tb1.setChecked(true);

}

public  void getStatus(View view)
{

 final  ToggleButton tb1=(ToggleButton)findViewById(R.id.toggleButton1);
  tb1.setOnCheckedChangeListener(new OnCheckedChangeListener() 
 {
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     {
        try
        {
        if(isChecked== false)
        {

            Toast.makeText(getApplicationContext(), "Switch off", Toast.LENGTH_LONG).show();
            //Toast.makeText(getApplicationContext(), "Switch on", Toast.LENGTH_LONG).show();   

        }


    }
    catch(Exception e)
    {
        Log.e("switchfailed",e.toString());
    }

  }


 });
4

1 回答 1

0

定义 onCreateMethod 中的切换按钮后,立即为其设置 OncheckedChangedListener()。我认为您正在为 XML 文件中的切换按钮定义 onClick。您在这里有一个逻辑错误,因为在第一次单击按钮时,您正在设置侦听器。因此,从下一次开始,它按预期工作,但不是第一次工作。要解决这个问题:

  • 在 onCreate() 方法中为切换按钮设置 OnCheckedChangedListener()。
  • 删除 XML 中的 onClick() 定义,您还可以摆脱 getStatus() 方法

要在多个切换按钮上实现 OnCheckedChangedListener,请让您的活动实现 OnCheckedChangedListener。然后,您可以覆盖 onCheckedChanged() 方法,如下所示:

@Override
public void onCheckedChanged(CompundButton button, boolean isChecked) {
    if(button.getId() == R.id.toggle1) // The id for your button
        // do what you'd need for toggle1
    else if(button.getId() == R.id.toggle2)
        // do what you'd need for toggle2
    else
        // do something
}

您可以直接使用上面的代码片段(但您将拥有与您拥有的按钮一样多的案例)。您也可以改用 switch 语句。不要忘记为所有按钮指定一个 id - 只有这样你才能使用它们。

于 2015-03-05T19:22:52.613 回答