-1

プログレスバーがいっぱいになった後、2番目のアクティビティを表示する必要があります。以下のコードを試しましたが、プログレスバーが表示されず、2番目のアクティビティのみが表示されます。

これはコードです:

   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>

助けてください

4

2 に答える 2

2

doWork()プログレスバーが何かをするように、関数を使用して時間を取っているようです。大きなループを作成しても、非常に高速に実行されるため、プログレス バーが移動することはありません。Thread.sleep()むしろ、ミリ秒単位でスリープする時間である引数を取る which を使用して、計算負荷の高い処理を行うスレッドをシミュレートしたいと考えています。

コードを次のように変更してみてください。

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;
}

これにより、進行状況バーが毎秒 1% ずつ増加します。そして最後に、ドキュメントThread.sleep(): https://developer.android.com/reference/java/lang/Thread.html#sleep(long )

編集:Ramzはこの答えに私を打ち負かしましたが、なぜそれが答えなのかについての説明はありません。私の説明がお役に立てば幸いです。

EDIT2: 質問をもう一度見始めたので、あなたが質問を編集したと思います。以前は XML にいくつかのエラーがありましたが、今はなくなりました。startActivity()とにかく、問題はワーカースレッド内への呼び出しが必要なことです。それ以外の場合、UI スレッドは関数が戻るのを待たずdoWork()、アプリの起動時にすぐに他のアクティビティを開始します。申し訳ありませんが、これについては前に言及する必要がありました。上記のコードは、この変更で更新されます。

于 2012-05-14T21:33:39.043 に答える
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;

 }

}

スプラッシュ.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 ファイルに必要な変更を加えてください

于 2012-05-14T21:27:57.580 に答える