Question

Je travaille avec un compte à rebours et l'ai réglé de telle sorte qu'il puisse être défini par l'utilisateur. Lorsque la minuterie arrive à 00h00 son supposé dire « fait! ». Pour une raison quelconque, je reçois le « fait! » juste après que je commence la minuterie. Après avoir atteint la pause et le reprendre montre mon compteur décomptage mais je ne suis pas si sûr que les clients vont être cool avec ça. Quelqu'un peut-il dire pourquoi je vais avoir ce problème? Merci.

        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();} 

        };

}
Était-ce utile?

La solution

Broyage hors du code d'initialisation me confondre là comme trop un certain temps à remarquer vos accolades n'a pas l'équilibre ...

il semble que vous créez votre comptoir et initialisant à l'extérieur des deux fonctions onclick. A ce stade de longueur est égale à zéro.

lorsque vous cliquez sur la longueur du bouton Démarrer se prépare à une heure valide, mais la minuterie n'est pas réinitialisés il commence par sa valeur préalablement réglée de zéro et les feux OnFinish immédiatement.

Lorsque vous appuyez sur pause le temps restant correct est calculé et qui est ensuite passé sur le nouveau compteur vous créez lors de la reprise qui procède ensuite à un compte à rebours normalement.

Déplacement counter = new MyCount(length, 100); jusqu'à juste après dialog.show();} doit veiller à ce que le compteur s'initialisés lorsque le bouton de réglage du temporisateur est cliqué et résoudre le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top