当第二次调用该活动时,进度条加载不会停止。

12 浏览
0 Comments

当第二次调用该活动时,进度条加载不会停止。

我创建了一个欢迎页面(启动器),并加入了一个进度条。在加载进度条后,下一个活动将会显示出来(几秒钟)。当应用程序第一次运行时,几秒钟后下一个活动将会显示出来。现在,当我按下返回按钮时,欢迎页面又重新显示出来。但这一次,几秒钟后,它又会像第一次那样调用下一个活动(使用Intent)。如何解决这个问题?

代码如下:

import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ProgressBar;
public class WelcomeActivity extends AppCompatActivity {
    ProgressBar p;
    private boolean mbActive;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_welcome);
        p = (ProgressBar) findViewById(R.id.progressBar);
        final Thread timerThread = new Thread() {
            @Override
            public void run() {
                mbActive = true;
                try {
                    int waited = 0;
                    while(mbActive && (waited < 1000)) {
                        sleep(200);
                        if(mbActive) {
                            waited += 200;
                            updateProgress(waited);
                        }
                    }
                } catch(InterruptedException e) {
                } finally {
                    onContinue();
                }
            }
        };
        timerThread.start();
    }
    @Override
    public void onDestroy() {
        super.onDestroy();
    }
    
    public void updateProgress(final int timePassed) {
        if(null != p) {
            final int progress = p.getMax() * timePassed / 100;
            p.setProgress(progress);
        }
    }
    public void onContinue() {
        Intent intd=new Intent(this,MainActivity.class);
        startActivity(intd);
    }
}

0
0 Comments

问题的原因是在一个非UI线程中修改了UI元素,解决方法是在UI线程中修改UI元素。可以通过使用runOnUiThread()方法来实现。具体代码如下:

public void onContinue() 
    {
    p.setVisibility(View.GONE);
    Intent intd=new Intent(this,MainActivity.class);
    startActivity(intd);
    }

try块中添加onContinue();方法。

这样就可以解决问题了。

0
0 Comments

问题的出现原因是在代码中,进度条的加载没有在第二次调用活动时停止。解决方法是在onResume()方法中调用showProgress()方法,来确保在每次活动重新调用时都会显示进度条。以下是修改后的代码:

public class WelcomeActivity extends AppCompatActivity {
    ProgressBar p;
    private boolean mbActive;
  
    protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_welcome);
    }
  
    public void updateProgress(final int timePassed) {
      if (null != p) {
        final int progress = p.getMax() * timePassed / 100;
        p.setProgress(progress);
      }
    }
  
    public void onContinue() {
      Intent intd = new Intent(this, MainActivity.class);
      startActivity(intd);
    }
  
    protected void onResume() {
      super.onResume();
      showProgress();
    }
  
    private void showProgress() {
      p = (ProgressBar) findViewById(R.id.progressBar);
      final Thread timerThread = new Thread() {
        public void run() {
          mbActive = true;
          try {
            int waited = 0;
            while (mbActive && (waited < 1000)) {
              sleep(200);
              if (mbActive) {
                waited += 200;
                updateProgress(waited);
              }
            }
          } catch (InterruptedException e) {
          } finally {
            onContinue();
          }
        }
      };
      timerThread.start();
    }
  
    public void onDestroy() {
      super.onDestroy();
    }
}

将进度条加载的代码放在onResume()方法中可以确保在每次活动重新调用时都会显示进度条。这样,无论活动被调用多少次,进度条加载都会停止。

0
0 Comments

问题出现的原因是在调用第二次活动时,进度条加载没有停止。解决方法是在活动调用的代码中添加一个进度对话框的dismiss操作。

解决方法如下所示:

public void onContinue() 
{
p.dismiss();
Intent intd=new Intent(this,MainActivity.class);
startActivity(intd);
}

其中,p.dismiss()用于关闭进度对话框。

0