Счетчик в андроиде - PullRequest
       42

Счетчик в андроиде

0 голосов
/ 01 марта 2011

Я хочу создать счетчик секундомера в Android.Имея кнопку, которую я нажимаю на счетчике, начинается и когда я нажимаю кнопку остановки, она останавливается.

Я написал этот код, но, похоже, он не работает

public class counter extends Activity {
/** Called when the activity is first created. */
Button btnStart;
TextView txtCounter;
boolean status = false;
int counter = 0;
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    btnStart = (Button) findViewById(R.id.btnStart);
    txtCounter = (TextView) findViewById(R.id.txtCounter);
    initCouner();
   btnStart.setOnClickListener(new OnClickListener() {  
    @Override
    public void onClick(View v) {
        if(status == false)
        {               
            for(int i=0; i < 500; i++)
            {
            txtCounter.setText(String.valueOf(i));
            }
            btnStart.setText("Stop");
            status = true;
        }
        else if (status == true)
        {

            btnStart.setText("Start");
            status = false;
            initCouner();
        }
    }
});

}
public void initCouner()
{
    btnStart.setText("Start");
    txtCounter.setText("0");
}}

Когдацикл начинается, показывает 499, не показывая счет.а также кнопка остановки не работает.

Спасибо

Ответы [ 4 ]

2 голосов
/ 01 марта 2011

С помощью ответа T0X1C я придумал следующий код:

public void onClick(View v) {
            if(status == false)
            {       
                btnStart.setText("Stop");
                status = true;


                new Thread(new Runnable() {


                    @Override
                    public void run() {
                        // TODO Auto-generated method stub


                        while(status!=false)
                        {
                            runOnUiThread(new Runnable() {

                                @Override
                                public void run() {
                                    // TODO Auto-generated method stub

                                    txtCounter.setText(String.valueOf(counter));
                                    counter++;
                                }
                            });
                            try {
                                Thread.sleep(100);
                            } catch (InterruptedException e) {
                                // TODO Auto-generated catch block
                                e.printStackTrace();
                            }
                        }

                    }



                }).start();

            }

    else if (status == true)
            {

                btnStart.setText("Start");
                status = false;
                initCouner();
            }
        }
    });
1 голос
/ 01 марта 2011

Измените свой код на

public void onClick(View v) {
    if(status == false)
    {       
        btnStart.setText("Stop");
        status = true;        
        new Thread(new Runnable()
        { run(){
              for(int i=0; i < 500; i++)
              {
                  runOnUiThread(new Runnable()
                        {
                            @Override
                            public void run()
                            {
                                txtCounter.setText(String.valueOf(i));
                            }
                        });
                   Thread.sleep(1000);
              }}
        }).start();

    }
    else if (status == true)
    {

        btnStart.setText("Start");
        status = false;
        initCouner();
    }
}
});
0 голосов
/ 01 марта 2011

Я предлагаю вам взглянуть на эту статью http://developer.android.com/resources/articles/timed-ui-updates.html Ваш текущий подход не сработает ..

0 голосов
/ 01 марта 2011

Возможно, проблема в том, что вы должны вести подсчет в отдельном потоке. Для этого загляните в asynctask (http://developer.android.com/reference/android/os/AsyncTask.html).

...