android - handler don't work in loop

37 Views Asked by At

I want to do app to show 3 elements (each 2 seconds) and each start showing after the before element. Here is code:

public void gameStart()
{
    do
    {
        Handler handler = new Handler();
        handler.postDelayed(new Runnable()
        {
            public void run()
            {

                if (data == 1)
                {
                    CountDownTimer cdt = new CountDownTimer(2000, 1000)
                    {

                        @Override
                        public void onTick(long millisUntilFinished)
                        {
                            element1.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onFinish()
                        {
                            element1.setVisibility(View.GONE);

                        }
                    }.start();

                } else if (data == 2)
                {
                    CountDownTimer cdt = new CountDownTimer(2000, 1000)
                    {

                        @Override
                        public void onTick(long millisUntilFinished)
                        {
                            element2.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onFinish()
                        {
                            element2.setVisibility(View.GONE);

                        }
                    }.start();

                } else if (data == 3)
                {
                    CountDownTimer cdt = new CountDownTimer(2000, 1000)
                    {

                        @Override
                        public void onTick(long millisUntilFinished)
                        {
                            element3.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onFinish()
                        {
                            element3.setVisibility(View.GONE);

                        }
                    }.start();

                } else if (data == 4)
                {
                    CountDownTimer cdt = new CountDownTimer(2000, 1000)
                    {

                        @Override
                        public void onTick(long millisUntilFinished)
                        {
                            element4.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onFinish()
                        {
                            element4.setVisibility(View.GONE);

                        }
                    }.start();

                } else if (data == 5)
                {
                    CountDownTimer cdt = new CountDownTimer(2000, 1000)
                    {

                        @Override
                        public void onTick(long millisUntilFinished)
                        {
                            element5.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onFinish()
                        {
                            element5.setVisibility(View.GONE);

                        }
                    }.start();

                } else if (data == 6)
                {
                    CountDownTimer cdt = new CountDownTimer(2000, 1000)
                    {

                        @Override
                        public void onTick(long millisUntilFinished)
                        {
                            element6.setVisibility(View.VISIBLE);
                        }

                        @Override
                        public void onFinish()
                        {
                            element6.setVisibility(View.GONE);

                        }
                    }.start();

                }

                id = id + 1;
                text.setText("cos " + id);
                data = random.nextInt(6) + 1;
            }
        }, 2000);
    } while (id <= 3);

}

But if I start application, it start lagging. App shout down. What should I do? And I also try this

public void gameStart()
{
    do
    {
                if (data == 1)
                {
                    element1.setVisibility(View.VISIBLE);
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable()
                    {
                        public void run()
                        {
                            element1.setVisibility(View.GONE);
                        }
                    }, 2000);

                } else if (data == 2)
                {
                    element2.setVisibility(View.VISIBLE);
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable()
                    {
                        public void run()
                        {
                            element2.setVisibility(View.GONE);
                        }
                    }, 2000);

                } else if (data == 3)
                {
                    element3.setVisibility(View.VISIBLE);
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable()
                    {
                        public void run()
                        {
                            element3.setVisibility(View.GONE);
                        }
                    }, 2000);

                } else if (data == 4)
                {
                    element4.setVisibility(View.VISIBLE);
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable()
                    {
                        public void run()
                        {
                            element4.setVisibility(View.GONE);
                        }
                    }, 2000);

                } else if (data == 5)
                {
                    element5.setVisibility(View.VISIBLE);
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable()
                    {
                        public void run()
                        {
                            element5.setVisibility(View.GONE);
                        }
                    }, 2000);

                } else if (data == 6)
                {
                    element6.setVisibility(View.VISIBLE);
                    Handler handler = new Handler();
                    handler.postDelayed(new Runnable()
                    {
                        public void run()
                        {
                            element6.setVisibility(View.GONE);
                        }
                    }, 2000);
                }

                id = id + 1;
                text.setText("cos " + id);
                data = random.nextInt(6) + 1;


    } while (id <= 3);

}

But all elements is visible in the same time

0

There are 0 best solutions below