0
  public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        loadData();
        setContentView(R.layout.preload);

        Thread thread = new Thread()
        {
            @Override
            public void run() {
               setUpDB();
               setContentView(R.layout.main);
            }
        };
        thread.start();
    }

そのため、データベースのセットアップ中にプリロードビュー(setUpDB)を表示し、セットアップが完了したらメインビューに切り替えてメインビューに変更します。私はそれをほとんど機能させました。ローダーを約80%まで表示してからクラッシュしますが、ローダーを表示することすらできません...スレッドにsetUpDB()があるとクラッシュし、スレッドの外にあると空白が表示されます完全にロードされるまで画面。以前持っていたコードを思い出せません...何かアイデアはありますか?

4

3 に答える 3

4

assynctaskを使用してこれを試してください。

         private class LoadAssync extends AsyncTask<String, Void, Void> { // Assync task

    protected void onPreExecute() {

            ProgressDialog dialog=ProgressDialog.show(this,"","Loading");

    }

    protected Void doInBackground(final String... args) {
         setUpDB();

    }

    protected void onPostExecute(final Void unused) {


        if (dialog.isShowing()) {
            dialog.dismiss();
        }

    }
}

assynctaskを実行するには

LoadAssync mAsyync1;

mAsyync1 = new LoadAssync();
            mAsyync1.execute(null);
于 2012-05-16T10:32:52.160 に答える
2

ハンドラーを宣言し、それを呼び出してUIを次のように更新します。

    public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

ProgressDialog pd=ProgressDialog.show(this,"","Please Wait...");
Handler handler =new Handler()
{
 public void handleMessage(Message msg)
{
 if(msg.what==0)
{
 pd.dismiss();
 setContentView(R.layout.main);
}
}
};   
            Thread thread = new Thread()
            {
                @Override
                public void run() {
                  loadData();
                   setUpDB();
                  handler.sendEmptyMEssage(0);
                }
            };
            thread.start();
        }
于 2012-05-16T10:28:35.770 に答える
0
    setUpDB();
    splashHandler.sendEmptyMessageDelayed(STOP_SPLASH, STOP_SPLASH_DELAY);

private Handler splashHandler = new Handler() {
    public void handleMessage(android.os.Message msg) {

        switch (msg.what) {
        case STOP_SPLASH:
                            progressbar.dismiss();  
            startActivity(new Intent(getApplicationContext(),
                    HomeScreenActivity.class));
            finish();
            break;
        }
    };
};
于 2012-05-16T10:27:57.300 に答える