0

私はカウントダウンタイマーを使用しており、ユーザーが設定できるように設定しています。タイマーが 00:00 になると、"done!" と表示されます。なぜか「できた!」タイマーをスタートさせた直後。一時停止して再開すると、カウンターのカウントダウンが表示されますが、顧客がこれで冷静になるかどうかはわかりません. なぜ私がこの問題を抱えているのか誰にもわかりますか? ありがとう。

        package score.keeper.basketball;

import android.app.Activity;
import android.app.Dialog;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;

public class Score extends Activity implements AdapterView.OnItemSelectedListener {

    private Button Button01;
    private Button Button02;
    private Button Button03;
    private Button Button04;
    private TextView TextView01;
    private TextView TextView02;
    private TextView TextView03;
    private TextView TextView06;
    private Spinner Spinner01;
    private Spinner Spinner02;

    private TextView Team01;
    private TextView Team02;

    TextView timeDisplay;
    int state = 0;
    int length;
    long startTime = 0;
    long currentTime = 0;
    long timeElapsed = 0;
    long timeRemaining = 0;
    long prevTimeRemaining = 0;
    Button control;
    MyCount counter;

    String[] goal={"Three", "Foul", "Two"};


    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);


        Button01 = (Button) findViewById(R.id.Button01);
        Button02 = (Button) findViewById(R.id.Button02);
        Button03 = (Button) findViewById(R.id.Button03);
        Button04 = (Button) findViewById(R.id.Button04);

        TextView01 = (TextView) findViewById(R.id.TextView01);
        TextView02 = (TextView) findViewById(R.id.TextView02);
        TextView03 = (TextView) findViewById(R.id.TextView03);
        TextView06 = (TextView) findViewById(R.id.TextView06);
        Team01 = (TextView) findViewById(R.id.TextView04);
        Team02 = (TextView) findViewById(R.id.TextView05);

        Team01.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                    final Dialog dialog = new Dialog(Score.this);
                    dialog.setContentView(R.layout.setteamname);
                    dialog.setTitle("Team Name");
                    dialog.setCancelable(true);

                    final EditText teamName = (EditText) dialog.findViewById(R.id.teamName);

                    Button btn = (Button) dialog.findViewById(R.id.setText);
                    btn.setOnClickListener(new View.OnClickListener() {

                        @Override
                        public void onClick(View v) {

                            String teamName2 = teamName.getText().toString();

                            Team01.setText("" + teamName2);

                            dialog.dismiss();
                                    }
                        });     
                    dialog.show();
            }});

        Team02.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                final Dialog dialog = new Dialog(Score.this);
                dialog.setContentView(R.layout.setteamname);
                dialog.setTitle("Team Name");
                dialog.setCancelable(true);

                final EditText teamName = (EditText) dialog.findViewById(R.id.teamName);

                Button btn = (Button) dialog.findViewById(R.id.setText);
                btn.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v) {

                        String teamName3 = teamName.getText().toString();

                        Team02.setText("" + teamName3);

                        dialog.dismiss();
                                }
                    });     
                dialog.show();
        }});

        Spinner spin = (Spinner) findViewById(R.id.Spinner01);
        spin.setOnItemSelectedListener((OnItemSelectedListener) this);

        ArrayAdapter<String> aa=new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, goal);

        aa.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spin.setAdapter(aa);


        Button01.setOnLongClickListener(subtractLeft);
        Button02.setOnClickListener(new Button.OnClickListener() {public void onClick(View v){my_func1();}});
        Button03.setOnLongClickListener(subtractRight);
        Button04.setOnClickListener(new Button.OnClickListener() {public void onClick(View v){my_func2();}});

        timeDisplay = (TextView) findViewById(R.id.timer);

        timeDisplay.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                final Dialog dialog = new Dialog(Score.this);
                dialog.setContentView(R.layout.custom_dialog);
                dialog.setTitle("Set Time");
                dialog.setCancelable(true);

                final EditText min = (EditText) dialog.findViewById(R.id.min);

                final EditText sec = (EditText) dialog.findViewById(R.id.sec);

                Button btn = (Button)dialog.findViewById(R.id.positive);
                btn.setOnClickListener(new View.OnClickListener() {

                    @Override
                    public void onClick(View v){

                        int min2 = Integer.parseInt(min.getText().toString());
                        int sec2 = Integer.parseInt(sec.getText().toString());

                        {length = (((min2 * 60) + sec2) * 1000);

                        dialog.dismiss();}

                    }});


                dialog.show();} 

                });
        counter = new MyCount(length, 100); 
        control = (Button) findViewById(R.id.control);

      }

      public void control(View view) {
        switch (state) {
        case 0:
          startTime = System.currentTimeMillis();
          counter.start();
          control.setText(R.string.pause);
          state = 1;
          break;
        case 1:
          // pause
          currentTime = System.currentTimeMillis();
          timeElapsed = currentTime - startTime;

          if (prevTimeRemaining == 0)
            timeRemaining = length - timeElapsed;
          else
            timeRemaining = prevTimeRemaining - timeElapsed;
          counter.cancel();
          timeDisplay.setText(formatTime(timeRemaining));
          control.setText(R.string.resume);
          prevTimeRemaining = timeRemaining;

          // resume
          counter = new MyCount(timeRemaining, 100);
          state = 0;
          break;
        case 2:
          prevTimeRemaining = 0;
          counter = new MyCount(length, 100);
          control.setText(R.string.start);
          timeDisplay.setText(R.string.timer);
          state = 0;
        }
      }

      public class MyCount extends CountDownTimer {

        public MyCount(long millisInFuture, long countDownInterval) {
          super(millisInFuture, countDownInterval);
        }

        public void onFinish() {
          timeDisplay.setText("done!");
          state = 2;
          control.setText(R.string.restart);
        }

        public void onTick(long millisUntilFinished) {
          timeDisplay.setText(formatTime(millisUntilFinished));
        }
      }




      public String formatTime(long millis) {
          String output = "00:00";
          long seconds = millis / 1000;
          long minutes = seconds / 60;
          // long hours = minutes / 60;

          seconds = seconds % 60;
          minutes = minutes % 60;
          // hours = hours % 60;

          String secondsD = String.valueOf(seconds);
          String minutesD = String.valueOf(minutes);
          // String hoursD = String.valueOf(hours); 

          if (seconds < 10)
            secondsD = "0" + seconds;
          if (minutes < 10)
            minutesD = "0" + minutes;
          // if (hours < 10)
            // hoursD = "0" + hours;

          output = minutesD + " : " + secondsD;
          return output;
        }



    public void setSpinner02(Spinner spinner02) {
        Spinner02 = spinner02;
    }

    public Spinner getSpinner02() {
        return Spinner02;
    }

    public void setSpinner01(Spinner spinner01) {
        Spinner01 = spinner01;
    }

    public Spinner getSpinner01() {
        return Spinner01;
    }

    public void onItemSelected(AdapterView<?> parent, View v, int position, long id)
    {
    if ("Three".equals(goal[position]))
    {TextView03.setText("3");}

    if ("Foul".equals(goal[position]))
    {TextView03.setText("1");}

    if ("Two".equals(goal[position]))
    {TextView03.setText("2");}

    }

    public void onNothingSelected(AdapterView<?> arg0) {
        // TODO Auto-generated method stub
        TextView03.setText("2");
        TextView06.setText("2");

    }


    void my_func1() {
        int scoreLeft; 
        int addOne;
        int scoreLeftTotal;

        addOne = Integer.parseInt(TextView03.getText().toString());
        scoreLeft = Integer.parseInt(TextView01.getText().toString());

        scoreLeftTotal = (scoreLeft + addOne);

        TextView01.setText("" + scoreLeftTotal);
        }


   void my_func2() {
            int scoreRight = Integer.parseInt(TextView02.getText().toString());
            int addOne = Integer.parseInt(TextView03.getText().toString());

            {int scoreRightTotal = (scoreRight + addOne);

            TextView02.setText("" + scoreRightTotal);
            }

    }
    private OnLongClickListener subtractLeft = new OnLongClickListener() { 
        public boolean onLongClick(View v) {
        int scoreLeft = Integer.parseInt(TextView01.getText().toString());
        int addOne = Integer.parseInt(TextView03.getText().toString());

        {int scoreLeftTotal = (scoreLeft - addOne);

        TextView01.setText("" + scoreLeftTotal);
        }

        return true; 
        }
};
private OnLongClickListener subtractRight = new OnLongClickListener() { 
    public boolean onLongClick(View v) {
    int scoreRight = Integer.parseInt(TextView02.getText().toString());
    int addOne = Integer.parseInt(TextView03.getText().toString());

    {int scoreLeftTotal = (scoreRight - addOne);

    TextView02.setText("" + scoreLeftTotal);
    }

    return true; 
    }
};

public void OnClick(View view) {
    if (view==Team01){
        Dialog dialog = new Dialog(Score.this);
        dialog.setContentView(R.layout.setteamname);
        dialog.setTitle("Team Name");
        dialog.setCancelable(true);

        final EditText teamName = (EditText) dialog.findViewById(R.id.teamName);

        teamName.setText(R.id.TextView04);

        Button btn = (Button)dialog.findViewById(R.id.setText);
        btn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                teamName.getText().toString();

                Team01.setText("" + teamName);

                }

            });

        dialog.show();} 

        };

}
4

1 に答える 1

0

初期化コードを切り落とすと、ブレースのバランスが取れていないことに気付くのに時間がかかりすぎて混乱しました...

カウンターを作成し、両方の onclick 関数の外で初期化しているようです。この段階で長さはゼロです。

開始ボタンをクリックすると、長さが有効な時間に設定されますが、タイマーは再初期化されないため、以前に設定されたゼロの値から開始され、onFinish がすぐに起動します。

一時停止を押すと、正しい残り時間が計算され、再開時に作成した新しいカウンターに渡され、通常のカウントダウンに進みます。

counter = new MyCount(length, 100);すぐ後ろに移動 dialog.show();}すると、タイマーの設定ボタンがクリックされたときにカウンターが初期化され、問題が修正されます。

于 2010-09-11T23:08:25.783 に答える