【问题标题】:How to restart count down timer if I come back to activity?如果我恢复活动,如何重新启动倒数计时器?
【发布时间】:2017-01-26 18:40:00
【问题描述】:

我有一个入口布局,需要看到 3 秒钟。如果我启动应用程序,它会停留 3 秒并且 activity 会发生变化,这没关系,但问题是,如果我在使用应用程序时通过智能手机的后压回到 activityavtivity 在 3 后不会改变秒。我是新手,找不到问题?请你帮助我好吗 ?谢谢

public class A1CoverPage extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.a1cover_page);

        getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        getSupportActionBar().setCustomView(R.layout.a0action_bar);

        new CountDownTimer(3000, 1000) {

            public void onTick(long millisUntilFinished) {

                EditText mTextField = (EditText) findViewById(R.id.editText);
                mTextField.setText(" Loading... ");

                ImageView mImageView = (ImageView) findViewById(R.id.imageView);
                mImageView.setImageResource(R.drawable.amblem);    
            }

            public void onFinish() {

                Intent intent = new Intent(A1CoverPage.this, A2ExperimentCalibration.class);
                startActivity(intent);

            }
        }.start();    
    }

【问题讨论】:

  • 如果你知道如何通过代码重启它,那么你应该把它放在onResume方法中

标签: android countdown back restart countdowntimer


【解决方案1】:

onCreate 只会在您的活动创建时第一次执行,但当您返回此活动时,onCreate 将不会再次执行。

所以overrideonstart 中的Activity 方法并将您的代码移到onstart

EditText mTextField;    
ImageView mImageView;
// ^^^^ declare views references 

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.a1cover_page);

    getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
    getSupportActionBar().setCustomView(R.layout.a0action_bar);    

    mTextField = (EditText) findViewById(R.id.editText);
    mImageView = (ImageView) findViewById(R.id.imageView);
    // ^^^ initialize views
}

@Override
protected void onStart() {
    super.onStart();

    new CountDownTimer(3000, 1000) {    
        public void onTick(long millisUntilFinished) {    
            mTextField.setText(" Loading... ");    
            mImageView.setImageResource(R.drawable.amblem);
        }

        public void onFinish() {    
            Intent intent = new Intent(A1CoverPage.this, A2ExperimentCalibration.class);
            startActivity(intent);    
        }
    }.start();
}

改进: 在课堂上声明你的视图并在onCreate 中初始化它们,而不是每次都在你的计时器匿名类中内部化它们

【讨论】:

    【解决方案2】:

    将您的CountDownTimer 移动到onStart() 中类似于这样的方法:

        @Override
        public void onStart() {
            super.onStart();
    
            new CountDownTimer(3000, 1000) {
    
            public void onTick(long millisUntilFinished) {
    
                EditText mTextField = (EditText) findViewById(R.id.editText);
                mTextField.setText(" Loading... ");
    
                ImageView mImageView = (ImageView) findViewById(R.id.imageView);
                mImageView.setImageResource(R.drawable.amblem);
    
            }
    
            public void onFinish() {
    
                Intent intent = new Intent(A1CoverPage.this, A2ExperimentCalibration.class);
                startActivity(intent);
    
            }
        }.start();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-30
      • 2020-12-11
      • 1970-01-01
      相关资源
      最近更新 更多