2017-10-13 39 views
0

尝试实现应该显示在按钮上的CountDownTimer。只要我不转动智能手机,它就可以正常工作。打开智能手机后,按钮仅显示初始值文本,即使牛仔时尚仍在运行。有人知道为什么在打开智能手机后,myButton.setText()方法在onTick()方法中不起作用吗?为什么在打开smarphone并使用CountDownTimer后不能在按钮上绘制文本?

public class MainActivity extends AppCompatActivity { 

    private TextView mTextMessage; 
    private TextView myTextView; 
    private Button myButton; 
    private CountDownTimer countDownTimer; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mTextMessage = (TextView) findViewById(R.id.message); 
     myTextView= (TextView) findViewById(R.id.textView); 
     myButton= (Button) findViewById(R.id.button); 
     myTextView.setText("Set new text"); 
     myButton.setText("Set Button text"); 
     myButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       myButton.setText("Button clicked"); 
       countDownTimer = new CountDownTimer(60 * 1000, 1000) { 
        @Override 
        public void onTick(long millisUntilFinished) { 
     //After turning the Smartphone the follow both methods do not work anymore 
         myButton.setText("Calc: " + millisUntilFinished/1000); 
         myTextView.setText("Calc: " + millisUntilFinished/1000); 
        } 
        @Override 
        public void onFinish() { 
        } 
       }; 
       //timer started 
       countDownTimer.start(); 
      } 
     }); 
    } 
} 
+0

请检查onFinish是否在您打开设备。 – AndroidStorm

+0

开启智能手机后不会调用完成。我也可以连接调试器,看到转动后计时器仍然运行。但myButton.setText(“Calc:”+ millisUntilFinished/1000); 方法不显示值。 –

+0

一般来说,我不认为你会对这段代码感到满意。例如:你有没有看到当你点击按钮第二次或第三次可以说在初始敲击后5秒钟后会发生什么? – Barns

回答

0

这里是我的代码示例... 请注意,我说的“DONE”文本在onFinish()方法,这样你就可以设置文字为你希望所有的UI组件......而且我在应用程序在后台运行的情况下添加if语句,以防在应用程序在后台运行之前保存一些信息

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    ... 

    myButton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      myButton.setText("Button clicked"); 
      countDownTimer = new CountDownTimer(3000, 1000) { 
       @Override 
       public void onTick(long millisUntilFinished) { 
        //After turning the Smartphone the follow both methods do not work anymore 
        if (!runningBackground) { 
         myButton.setText("Calc: " + millisUntilFinished/1000); 
         myTextView.setText("Calc: " + millisUntilFinished/1000); 
        } else { 
         //Do something 
        } 
       } 
       @Override 
       public void onFinish() { 
        if (!runningBackground) { 
         //Do something 
        } 
        mTextMessage.setText("DONE"); 
        runningBackground = false; 
        running = false; 
       } 
      }; 
      //timer started 
      countDownTimer.start(); 
      running = true; 
     } 
    }); 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    runningBackground = false; 
} 

@Override 
protected void onPause() { 
    runningBackground = true; 
    super.onPause(); 
} 
相关问题