【问题标题】:how to set different onclicklisteners on same button click?如何在同一个按钮单击时设置不同的 onclick 侦听器?
【发布时间】:2018-01-30 13:09:12
【问题描述】:

我正在 android 中实现一个计时器,带有一个文本视图和一个用于启动/停止的按钮。

如何在同一个按钮的 clicklistener 上设置注册不同的事件,这样当第一次点击它时它会启动一个计时器,当它第二次点击它会停止计时器并报告事件之间的时间? 我正在 android 中实现一个计时器,带有一个文本视图和一个用于启动/停止的按钮。

如何设置在同一个按钮的clicklistener上注册不同的事件,这样当它第一次被点击时它会启动一个定时器,当它第二次被点击时它会停止定时器并报告事件之间的时间?

编辑1

我所做的是,

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_depth);
    findViewById(R.id.btn).setOnClickListener(this);

}
boolean showingFirst = true;
public void generate(View view){

    if(showingFirst){
        long startTime = System.currentTimeMillis();
        showingFirst = false;
    }else{
        long difference = System.currentTimeMillis() - startTime;
        showingFirst = true;
        TextView myText = (TextView)findViewById(R.id.tv);
        myText.setText(String.valueOf(difference));
    }

}

但是由于长启动时间是在 if 当控件进入 else 循环时开始的,所以它显示 无法解析符号“startTime”

请帮助并特别感谢 eliamyro

【问题讨论】:

  • 你可以在onClickListener里面使用条件,不需要不同的onClick。
  • 能否请您参考我的链接来描述它或提供一些代码sn-p。谢谢
  • 我相信@NiranjPatel 指的是侦听器中的一个简单的if 条件。如果您有一些 Java 知识,我应该很容易使用它。

标签: java android onclicklistener android-button


【解决方案1】:

您可以使用全局布尔值isStart 来执行此操作,并根据isStart 的值启动或停止计时器。

btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (isStart) {
            // Stop timer
            isStart = false;
        } else {
            // Start timer
            isStart = true;
        }
    }
});

【讨论】:

    【解决方案2】:

    试试这个,

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            if(btn.getText().toString().equals("Start")){
                btn.setText("Stop");
                // start timer
            }else{
                btn.setText("Start");
                // stop timer
            }
        }
    });
    

    【讨论】:

      【解决方案3】:

      点击(开始/停止)按钮根据您的代码启动计时器并向按钮返回一个值,当您再次点击该标志值时,该标志值可用于创建停止和启动的 if 条件

      【讨论】:

        【解决方案4】:

        当您使用按钮启动和停止Timer 时,您只需检查计时器是否正在运行。我建议为该用例扩展 TimerTask(我从 here 获取该代码):

        public class YourTimerTask extends TimerTask {
        
            private boolean isRunning = false;
        
            @Overrides
            public void run() {
                this.isRunning = true;
                //rest of run logic here...
            }
        
            public boolean isRunning() {
                return this.isRunning;
            }
        }
        

        然后在您的onClickListener 中,您可以检查您的计时器是否正在运行:

        startStopBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (yourTimer.isRunning()) {
                    stopTimer();
                } else {
                    startTimer();
                }
            }
        });
        

        【讨论】:

          猜你喜欢
          • 2018-06-29
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-27
          • 1970-01-01
          • 1970-01-01
          • 2015-07-31
          • 1970-01-01
          相关资源
          最近更新 更多