Question

I set a textview, which I use for timer-function. When the timer reachs my wanted time it should start a new activity, that set my Layout to another one.

textfield=(TextView)findViewById(R.id.TVTimer);
    handler = new Handler();
    Runnable runnable = new Runnable() {

        @Override
        public void run() {
            while (Running){
                try {

                    Thread.sleep(1000);
                    }

                catch (InterruptedException e) {
                    e.printStackTrace();
                    // TODO: handle exception
                }
                handler.post(new Runnable() {
                    @Override
                    public void run(){
                        number+=1;
                        textfield.setText(String.valueOf(number));
                        if (number>5) {
                            Intent intent = new Intent(getApplicationContext(), Uebung2.class);
                            startActivity(intent);

                        }

                    }
                } );
            }

        }
    };
    new Thread(runnable).start();

That is the called class:

   public class Uebung2 extends Oberklasse {


@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    //Liegestützen1(2);
    setContentView(R.layout.new);

}

}

Now I am having the problem after the timer reached the time, which I want, my app is settin g the layout again and again for every second. What is the solution to set the layout for once?

Was it helpful?

Solution 2

use this

textfield=(TextView)findViewById(R.id.TVTimer);
boolean loop = true;

handler = new Handler();
Runnable runnable = new Runnable() {

    @Override
    public void run() {
        while (loop){
            try {

                Thread.sleep(1000);
                }

            catch (InterruptedException e) {
                e.printStackTrace();
                // TODO: handle exception
            }
            handler.post(new Runnable() {
                @Override
                public void run(){
                    number+=1;
                    textfield.setText(String.valueOf(number));
                    if (number>5) {
                        loop = false; // this will end loop
                        Intent intent = new Intent(getApplicationContext(), Uebung2.class);
                        startActivity(intent);

                    }

                }
            } );
        }

    }
};
new Thread(runnable).start();

OTHER TIPS

beacuse you have place this

 handler.post(new Runnable() {
                @Override
                public void run(){
                    number+=1;
                    textfield.setText(String.valueOf(number));
                    if (number>5) {
                        Intent intent = new Intent(getApplicationContext(), Uebung2.class);
                        startActivity(intent);

                    }

                }
            } );

inside your while loop.

also check your "number" value.

try your while loop as

 int i=1000;
 while (i<5000){
            try {

                Thread.sleep(i);
                i+=1000;
                }

            catch (InterruptedException e) {
                e.printStackTrace();
                // TODO: handle exception
            }
         }

and after this execute your runnable.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top