【问题标题】:Android - Make a dynamic counter using setText()Android - 使用 setText() 制作动态计数器
【发布时间】:2015-02-13 12:50:05
【问题描述】:

我正在制作一个统计计数器,可以计数到某个数字(比如 60),并且用户应该看到每个数字在屏幕上递增。

    TextView display1;
    public int stat1 = 60;
    public void doSomething(View v){

    display1 = (TextView)findViewById(R.id.stat);

    for(int i=0;i<=stat1;i++){
        String temp = (String.valueOf(i));
        for(long j=0;j<1000000;j++);
        Log.d("PATO","Value - "+i);
        display1.setText(temp);
        display1.invalidate();
   }
}

但是,尽管我可以在调试屏幕上看到增量,但此代码仅在屏幕上显示最终数字,即 60。

【问题讨论】:

  • 您的 TextView 文本从 0 变为 60,但您将只能看到最后一个索引 (60)。如果您希望用户能够看到它,请创建一个计时器/间隔并添加一个延迟,每次触发此内部时,您都会增加索引并更新 TextView,直到索引等于 60。

标签: android dynamic textview counter settext


【解决方案1】:

请找到以下解决方案

protected static void startTimer() {
    isTimerRunning = true; 
    timer.scheduleAtFixedRate(new TimerTask() {
        public void run() {
            elapsedTime += 1; //increase every sec
            mHandler.obtainMessage(1).sendToTarget();

        }
    }, 0, 1000);
};

public Handler mHandler = new Handler() {
    public void handleMessage(Message msg) {
        StopWatch.time.setText(formatIntoHHMMSS(elapsedTime)); //this is the textview
    }
}

以上代码必须有效...

注意:mHandler 必须在你的主线程中创建。

【讨论】:

    【解决方案2】:
    As your counter is fast . so display1.setText() is overlapping the value, so you cannot see the previous value, so you can do this :
    
    for(int i=0;i<=stat1;i++){
            String temp = (String.valueOf(i));
    Log.d("Value",temp);
            Thread.sleep(1000);
            for(long j=0;j<1000000;j++);
            Log.d("PATO","Value - "+i);
            display1.setText(temp);
            display1.invalidate();
       }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-25
      • 1970-01-01
      相关资源
      最近更新 更多