进度条不会显示在屏幕上

时间:2012-05-14 21:13:29

标签: android android-activity progress-bar

我需要在填充进度条后显示第二个活动。我尝试了下面的代码,但它没有显示进度条,只显示了我的第二个活动。

这是代码:

   public class MiSuper2 extends Activity {
        String strListas[] = null;
        private ProgressBar mProgress;
        private int mProgressStatus = 0;
        private Handler mHandler = new Handler();
        private StoreData stdArticulos = null;
        public Cursor cursor = null;
        private long fileSize = 0;

        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        stdArticulos = new StoreData(this);

        fileSize = 0;
        setContentView(R.layout.main);
        stdArticulos = new StoreData(this);
        cursor = stdArticulos.leerArticulos();

        mProgress = (ProgressBar) findViewById(R.id.progressbar_activity);

        new Thread(new Runnable() {
            public void run() {
                while (mProgressStatus < 100) {
                    mProgressStatus = doWork();

                    mHandler.post(new Runnable() {
                        public void run() {
                            mProgress.setProgress(mProgressStatus);
                        }
                    });
                }
            }
        }).start();

        if(cursor.moveToFirst()) {
            do{
                strListas[cursor.getPosition()] = cursor.getString(cursor.getPosition());
            }while(cursor.moveToNext());
        }       

        Intent intent = new Intent(MiSuper2.this, PntArticulo.class);
        startActivity(intent);

    }

    public int doWork() {       
        while (fileSize <= 1000000) {
            fileSize++;
            return (int) fileSize;
        }
        return 100;
    }
}

这是main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="center_horizontal"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imvLogo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/presentacion" 
        android:contentDescription="@string/logo"/>

    <ProgressBar
        android:id="@+id/progressbar_activity"
        style="?android:attr/progressBarStyleHorizontal"
        android:layout_width="200dp"
        android:layout_height="wrap_content" android:layout_marginTop="100dp"/>

</LinearLayout>

请帮忙

2 个答案:

答案 0 :(得分:2)

看起来您正在使用doWork()函数来占用时间,以便您进度条可以执行某些操作。即使你写了一个大循环,它仍然执行得非常快,所以你看不到你的进度条移动。相反,你想通过使用Thread.sleep()来模拟你的线程做一些计算密集的事情,new Thread(new Runnable() { public void run() { while (mProgressStatus < 100) { try { mProgressStatus += doWork(); } catch (InterruptedException e) { e.printStackTrace(); } mHandler.post(new Runnable() { public void run() { mProgress.setProgress(mProgressStatus); } }); } runOnUiThread(new Runnable() { @Override public void run() { startActivity(new Intent(MiSuper2.this, Second.class)); } }); } }).start(); 接受一个以毫秒为单位的休眠时间。

尝试将代码更改为:

public int doWork() throws InterruptedException {
    Thread.sleep(1000);
    return 1;
}

和...

Thread.sleep()

这会使您的进度条每秒增加1%。最后,关于startActivity()的文档:https://developer.android.com/reference/java/lang/Thread.html#sleep(long

编辑:拉姆斯打败了我这个答案,但没有解释为什么它是答案。希望我的解释有所帮助。

EDIT2:自从我第二次开始研究你以来,我认为你已经编辑了你的问题。您以前在XML中有一些错误,但现在它已经消失了。无论如何,您现在的问题是需要在工作线程内调用doWork()。否则,UI线程不会等待{{1}}函数返回,并在应用程序启动时立即启动另一个Activity。对不起,我之前应该提到这个。我在上面发布的代码会随着此更改而更新。

答案 1 :(得分:1)

请尝试使用此代码 SplashScreen.java

package com.cud.point;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.ProgressBar;
import android.widget.TextView;

public class SplashScreen extends Activity {

 ProgressBar bar;

 TextView txt;

 int total=0;

 boolean isRunning=false;

 // handler for the background updating

 Handler handler=new Handler() {

 @Override

 public void handleMessage(Message msg) {

 total=total+20;

 String perc=String.valueOf(total).toString();

 txt.setText(perc+"% completed");

 bar.incrementProgressBy(20);

 }

 };

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.splash);

bar=(ProgressBar)findViewById(R.id.progress);

 txt=(TextView)findViewById(R.id.txt);
 Handler x = new Handler();
 x.postDelayed(new SplashHandler(), 5000);
 }
 class SplashHandler implements Runnable 
 {

    public void run() {
        // TODO Auto-generated method stub
        startActivity(new Intent(getApplication(),YourSecound Activity.class));
        SplashScreen.this.finish();
    }


}

public void onStart() {

 super.onStart();

 // reset the bar to the default value of 0

 bar.setProgress(0);

  // create a thread for updating the progress bar

 Thread background=new Thread(new Runnable() {

 public void run() {

 try {

 for (int i=0;i<5 && isRunning;i++) {

 // wait 100ms between each update

 Thread.sleep(1000);

 handler.sendMessage(handler.obtainMessage());

 }

 }

 catch (Throwable t) {

   }     }     });

 isRunning=true;

  // start the background thread

 background.start();

 }

 public void onStop() {

 super.onStop();

 isRunning=false;

 }

}

<强> splash.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical"
android:padding="15px" >

<TextView
    android:id="@+id/textView1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Loading......" />

<TextView
    android:id="@+id/txt"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" 
    android:layout_below="@+id/imageView1"/>

<ImageView
    android:id="@+id/imageView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:src="@drawable/splash" />

<ProgressBar
    android:id="@+id/progress"
    style="?android:attr/progressBarStyleHorizontal"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/imageView1"
    android:layout_alignLeft="@+id/imageView1"
    android:max="100" />

</RelativeLayout>

这是我项目的一个示例,因此请在xml文件中进行必要的更改