Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/198.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从按下按钮开始,每秒运行一个方法_Java_Android - Fatal编程技术网

Java 从按下按钮开始,每秒运行一个方法

Java 从按下按钮开始,每秒运行一个方法,java,android,Java,Android,我需要一个定时器来启动任何时候我按下一个按钮(按钮本身),显示多少秒,因为它是实时按下。每当再次按下时,计时器将重置为0并再次开始递增 我知道这不是方法,按钮工作正常,但计时器应该在onCreate中?我不知道这个按钮怎么用 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCre

我需要一个定时器来启动任何时候我按下一个按钮(按钮本身),显示多少秒,因为它是实时按下。每当再次按下时,计时器将重置为0并再次开始递增

我知道这不是方法,按钮工作正常,但计时器应该在onCreate中?我不知道这个按钮怎么用

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        downloadedImg = (ImageView) findViewById(R.id.imageView);
    }

    public void clickAsync(View view) {

            new ImageDownloader().execute(downloadUrl);
            int seconds = 0;
            Button button = (Button) view;

            button.setText("Seconds since clicked: " + seconds);
            Timer timer = new Timer();

            //each time button is clicked, time is reset to 0 and increments in real time
            timer.scheduleAtFixedRate(new TimerTask()
            {
                public void run()
                {
                    seconds = 0;
                    seconds++;
                    button.setText("Seconds since clicked: " + seconds);
                }
            }, 0, 1000);
      }
}

试试这个:使用一个处理程序

 long startTime = 0;
 long elapsedTime ;

//runs without a timer by reposting this handler at the end of the runnable
Handler timerHandler = new Handler();
Runnable timerRunnable = new Runnable() {

    @Override
    public void run() {
        long millis = System.currentTimeMillis() - startTime;
        int seconds = (int) (millis / 1000);
        int minutes = seconds / 60;
        int hours = minutes / 60;
        seconds = seconds % 60;
        //textview for displaying time..
        timerTextView.setText(String.format("%d:%02d:%02d", hours, minutes, seconds));

        timerHandler.postDelayed(this, 1000);
    }
};

 b.setOnClickListener(new View.OnClickListener() { //b is your button

    @Override
    public void onClick(View v) {
        Button b = (Button) v;
        if (b.getText().equals("Stop")) {
            elapsedTime = System.currentTimeMillis() - startTime;
            timerHandler.removeCallbacks(timerRunnable);
            b.setText("Resume");
        } else {
            startTime = System.currentTimeMillis() - elapsedTime;
            timerHandler.postDelayed(timerRunnable, 0);
             Calendar cs = Calendar.getInstance();
            System.out.println("Current time => " + cs.getTime());
            SimpleDateFormat df = new SimpleDateFormat("HH:mm");
            String formattedDate = df.format(cs.getTime());
            timerTextView.setText(formattedDate);
            b.setText("Stop");
        }
    }
});

它将计算经过的时间并显示停止后的时间…

另一种简单的方法是使用
处理程序

mHandler = new Handler();
只需调用
updateSec()方法单击一个按钮,它将在1秒的时间间隔内更新秒

Runnable UpdateRunnable = new Runnable() {

    @Override
    public void run() {
        updateSec();
    }
};

    public void updateSec() {
          mSeconds++;
          mHandler.postDelayed(UpdateRunnable, 1000);
     }
范例

button.setOnClickListener(new OnClickListener() {

public void onClick(View v) {
    mSeconds = 0;
    updateSec();//it'll update sec variable every second.
  }
});
您可以使用以下线程:

@Override
public void onClick(View view){
switch(view.getId()){
case R.id.button:
new Thread(new Runnable() {
@Override
public void run() {
try{
Thread.sleep(1000);
} catch(InterruptedException e) {
e.printStackTrace();
}
count++;
textView.post(new Runnable() {
@Override
public void run() {
textView.setText(count + "");
}
});
}
}
}).start;
break;
}
}
视图必须在主线程上更新,因此需要使用以runnable实例为参数的post()方法


或者,您也可以使用AsyncTask。

直接在类中声明
计时器
,而不是在
中单击Async()
我无法理解您的问题。你想实现什么?@JayminPanchal但是秒/按钮需要声明为final,因为它是在内部类中访问的,所以我的代码不起作用