将onClickListener附加到ToggleButton

nkc*_*cmr 33 android togglebutton

我有一个ToggleButton,我需要设置简单的点击操作.如何为ToggleButton实现简单的单击侦听器?

如果您需要详细信息,请询问.

Kei*_*son 52

    this.someToggleButton = (ToggleButton)findViewById(R.id.someToggleButton) ;
    this.someToggleButton.setOnCheckedChangeListener( new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {
            doSomethingWith(toggleButton, isChecked) ;
        }
    }) ;
Run Code Online (Sandbox Code Playgroud)

  • 我首先尝试了这个,但在我的情况下,`OnClickListener`实际上是正确的路径,因为即使你以编程方式更改`isChecked`,`OnCheckedChangedListener`也会被触发.当我第一次加载活动并设置初始检查状态时,这会导致不良副作用. (6认同)

Jac*_*Ras 39

ToggleButton扩展了View,所以你可以简单地使用View.setOnClickListener(),如下所示:

// get your ToggleButton
ToggleButton b = (ToggleButton) findViewById(R.id.myButton);

// attach an OnClickListener
b.setOnClickListener(new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        // your click actions go here
    }
});
Run Code Online (Sandbox Code Playgroud)


sal*_*lid 30

使用View.setOnClickListener()和检查按钮的状态.

    final ToggleButton tB = (ToggleButton) findViewById(R.id.toggleButton1);
    tB.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            if(tB.isChecked()){
                //Button is ON
                            // Do Something 
            }
            else
            //Button is OFF
                            // Do Something     
        }
    });
Run Code Online (Sandbox Code Playgroud)


dav*_*wil 16

只是为了在其他答案中添加一个未强调的点 - 以编程方式绑定点击处理程序对bolierplate代码有点沉重.正如文档中所提到,它仅在某些情况下是必要的,例如:

  • 如果在运行时实例化ToggleButton
  • 如果在Fragment子类中定义了单击行为

如果在布局中定义了ToggleButton,那么在那里绑定处理程序方法会更简单,更简洁

<ToggleButton 
  android:id="@+id/togglebutton"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:textOn="On"
  android:textOff="Off"
  android:onClick="onToggleClicked"/>
Run Code Online (Sandbox Code Playgroud)

然后,只需要在Activity Java中定义处理程序方法

public void onToggleClicked(View view) {
    if(((ToggleButton) view).isChecked()) {
        // handle toggle on
    } else {
       // handle toggle off
    }    
}
Run Code Online (Sandbox Code Playgroud)

请注意,该方法可以具有任何名称,但签名必须符合以下条件:

  • 必须是一种public方法
  • 必须回来 void
  • 必须采用一个类型的参数View(这将是View被点击的)