【发布时间】:2011-10-31 18:36:56
【问题描述】:
我有一个 ToggleButton,我需要设置简单的点击操作。如何为 ToggleButton 实现一个简单的点击监听器?
如果您需要详细信息,请询问。
【问题讨论】:
-
向我们展示您迄今为止所做的尝试,并解释为什么它不适合您。
标签: android togglebutton
我有一个 ToggleButton,我需要设置简单的点击操作。如何为 ToggleButton 实现一个简单的点击监听器?
如果您需要详细信息,请询问。
【问题讨论】:
标签: android togglebutton
this.someToggleButton = (ToggleButton)findViewById(R.id.someToggleButton) ;
this.someToggleButton.setOnCheckedChangeListener( new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {
doSomethingWith(toggleButton, isChecked) ;
}
}) ;
【讨论】:
OnClickListener 实际上是正确的路径,因为即使您以编程方式更改isChecked,OnCheckedChangedListener 也会被触发。当我第一次加载活动并设置初始检查状态时,这会导致不良副作用。
onCheckedChangedListener之前设置初始检查状态?
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
}
});
【讨论】:
使用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
}
});
【讨论】:
只是添加一个在其他答案中没有强调的点 - 以编程方式绑定点击处理程序对样板代码有点重。正如the docs 中提到的,仅在某些场景下才需要,例如:
如果在布局中定义了 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"/>
那么只需要在Activity Java中定义handler方法
public void onToggleClicked(View view) {
if(((ToggleButton) view).isChecked()) {
// handle toggle on
} else {
// handle toggle off
}
}
注意方法可以有任何名称,但签名必须满足以下条件:
public 方法void
View 类型的单个参数(这将是被点击的View)【讨论】:
mTB = (ToggleButton) findViewById(R.id.toggleButton1);
mTB.setOnClickListener(new OnClickListener()
{
@Override
public void onClick(View v)
{
// Is the toggle on?
boolean on = ((ToggleButton) v).isChecked();
if (on) {
// Enable here
} else {
// Disable here
}
}
});
【讨论】:
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
if(isChecked){
Toast.makeText(getApplicationContext(),"on",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(getApplicationContext(),"off",Toast.LENGTH_SHORT).show();
}
}
【讨论】:
要从代码中添加它,您可以执行以下操作:
yourButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
但是,您也可以在 XML 中为您的按钮指定要与 onClick 操作/事件关联的方法。
【讨论】:
尝试ToggleButton 类的setOnCheckedChangeListener 方法
ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {
//
}
}) ;
【讨论】:
如果上面的代码不起作用试试
b.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
// your click actions go here
}
});
【讨论】: