【问题标题】:attach onClickListener to ToggleButton将 onClickListener 附加到 ToggleButton
【发布时间】:2011-10-31 18:36:56
【问题描述】:

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

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

【问题讨论】:

  • 向我们展示您迄今为止所做的尝试,并解释为什么它不适合您。

标签: android togglebutton


【解决方案1】:
    this.someToggleButton = (ToggleButton)findViewById(R.id.someToggleButton) ;
    this.someToggleButton.setOnCheckedChangeListener( new OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {
            doSomethingWith(toggleButton, isChecked) ;
        }
    }) ;

【讨论】:

  • 我首先尝试了这个,但在我的情况下,OnClickListener 实际上是正确的路径,因为即使您以编程方式更改isCheckedOnCheckedChangedListener 也会被触发。当我第一次加载活动并设置初始检查状态时,这会导致不良副作用。
  • @jokeefe 你能不能在设置onCheckedChangedListener之前设置初始检查状态?
【解决方案2】:

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 。你可以像 b.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // 你的点击操作转到这里 } }); 一样使用它
【解决方案3】:

使用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     
        }
    });

【讨论】:

  • 为什么你在 ToggleButton 中使用了'final'。 @salman khalid 请解释一下
  • @LASIAF 没有 final,在 public void onClick() 内你将无法访问 tB。
【解决方案4】:

只是添加一个在其他答案中没有强调的点 - 以编程方式绑定点击处理程序对样板代码有点重。正如the docs 中提到的,仅在某些场景下才需要,例如:

  • 如果 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"/>

那么只需要在Activity Java中定义handler方法

public void onToggleClicked(View view) {
    if(((ToggleButton) view).isChecked()) {
        // handle toggle on
    } else {
       // handle toggle off
    }    
}

注意方法可以有任何名称,但签名必须满足以下条件:

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

【讨论】:

  • 简单明了!这应该被接受。
【解决方案5】:
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
            }

        }
    });

【讨论】:

    【解决方案6】:
    @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();
        }
    }
    

    【讨论】:

    • 发布答案时,请尝试解释为什么会解决此问题以及代码。
    【解决方案7】:

    要从代码中添加它,您可以执行以下操作:

    yourButton.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
          finish();
        }
      });
    

    但是,您也可以在 XML 中为您的按钮指定要与 onClick 操作/事件关联的方法。

    【讨论】:

      【解决方案8】:

      尝试ToggleButton 类的setOnCheckedChangeListener 方法

      ToggleButton toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
      toggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
          @Override
          public void onCheckedChanged(CompoundButton toggleButton, boolean isChecked) {
              // 
          }
      }) ;
      

      【讨论】:

        【解决方案9】:

        如果上面的代码不起作用试试

        b.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
               // your click actions go here
            }
        });
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多