これは、「カウントダウンタイマーを一時停止するにはどうすればよいですか」というよくある質問のようです。
私は有望に見えるこのコードを見つけました:
コードで実装する方法がわかりません。抽象化されたメソッドをオーバーライドして、クラスを拡張する必要があります。誰かが私にこれを行う方法のアイデアを与えることができますか?
これは、「カウントダウンタイマーを一時停止するにはどうすればよいですか」というよくある質問のようです。
私は有望に見えるこのコードを見つけました:
コードで実装する方法がわかりません。抽象化されたメソッドをオーバーライドして、クラスを拡張する必要があります。誰かが私にこれを行う方法のアイデアを与えることができますか?
これがあなたのレイアウトです
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="0"
android:gravity="center_horizontal"
android:layout_marginBottom="40dp"
android:layout_marginTop="20dp"
android:textSize="27dp"
android:id="@+id/txtView"/>
<RelativeLayout
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_gravity="center">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start"
android:id="@+id/startButton"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Stop"
android:id="@+id/stopButton"
android:layout_toRightOf="@id/startButton"/>
</RelativeLayout>
</LinearLayout>
これがあなたのアクティビティクラスです
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MyActivity extends Activity implements View.OnClickListener {
TextView txt = null;
Button startButton = null;
Button stopButton = null;
CountDownTimerWithPause timer = null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
txt = (TextView) findViewById(R.id.txtView);
startButton = (Button) findViewById(R.id.startButton);
stopButton = (Button) findViewById(R.id.stopButton);
startButton.setOnClickListener(this);
stopButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view == startButton) {
if (timer == null) {
initTimer();
}
timer.resume();
}
if (view == stopButton) {
timer.pause();
}
}
private void initTimer() {
timer = new CountDownTimerWithPause(10000, 1000, false) {
@Override
public void onTick(long millisUntilFinished) {
Integer currentValue = Integer.valueOf((String) MyActivity.this.txt.getText());
MyActivity.this.txt.setText(String.valueOf(currentValue + 1));
}
@Override
public void onFinish() {
Toast.makeText(MyActivity.this, "finish", Toast.LENGTH_SHORT).show();
}
};
timer.create();
}
}
CountDownTimerWithPauseをパッケージにコピーすることを忘れないでください。
私のために働く、しかし...
いくつかのバグについて言及しますが、それはアプリケーションによって異なります。多分それはあなたにとって大丈夫です。バグは-タイマーを開始すると、すぐに起動します。'だから何?' あなたは尋ねるかもしれません。3秒半が経過したときに[停止]ボタンをクリックするとします。したがって、[スタート]ボタンをクリックすると、4が表示される前に0.5秒のパスが期待されますが、そのクラスの実装ではそうではありません。
そして、カウントの終わりにいくつかの奇妙な遅れがあります。より良い実装を探すことをお勧めします。
私はCountDownTimerWithPause
自分のプロジェクトで使用しましたが、それは非常に簡単です。このカウンターの実装を説明するために書いたこのサンプルコードを見てください。
後で説明するために、サンプルのXMLレイアウトを作成しました。このレイアウトには3つのボタンが含まれています。
レイアウト:
<Button
android:id="@+id/button_start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Start" />
<Button
android:id="@+id/button_pause"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Pause" />
<Button
android:id="@+id/button_resume"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Resume" />
この例のために、私はアクティビティ内で作業しました。だからこれはコードです:
public class MainActivity extends Activity
{
private CountDownTimerWithPause _countDownTimerWithPause = null;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.timer);
/*
* Definition of the counter
*/
_countDownTimerWithPause = new CountDownTimerWithPause(10000, 1000, true)
{
@Override
public void onTick(long millisUntilFinished)
{
Toast.makeText(getApplicationContext(), "Tick", Toast.LENGTH_SHORT).show();
}
@Override
public void onFinish()
{
Toast.makeText(getApplicationContext(), "Finished", Toast.LENGTH_SHORT).show();
}
};
/*
* Click to start the counter
*/
Button buttonStart = (Button) findViewById(R.id.button_start);
buttonStart.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
_countDownTimerWithPause.create();
}
});
/*
* Click to pause the counter
*/
Button buttonPause = (Button) findViewById(R.id.button_pause);
buttonPause.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
_countDownTimerWithPause.pause();
}
});
/*
* Click to resume the counter
*/
Button buttonResume = (Button) findViewById(R.id.button_resume);
buttonResume.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
_countDownTimerWithPause.resume();
}
});
}
}
CountDownTimerWithPause
カウンターを開始、一時停止、再開するために、どのように拡張し、どのメソッドを呼び出す必要があるかを簡単に確認できます。
このカウンターの使い方を説明できたらと思います。