计数器在android中

时间:2011-03-01 06:08:14

标签: android loops counter

我想在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 个答案:

答案 0 :(得分:2)

在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 :(得分:1)

将您的代码更改为此

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

答案 2 :(得分:0)

也许问题是你应该在一个单独的线程中进行计数。查看asynctask(http://developer.android.com/reference/android/os/AsyncTask.html)来做到这一点。

答案 3 :(得分:0)

我建议你看一下这篇文章http://developer.android.com/resources/articles/timed-ui-updates.html 你当前的方法不会起作用..