2011-07-12 10 views
0

私のアプリケーションのViewFlipperには3 ViewGroupsが含まれています。各ViewGroup interactionは、データベースのデータに依存します。私はAsyncTaskを使ってデータベースから読み込み、完了したらCursorを返します。 AsyncTaskを実行する前に、「データをロードしています、お待ちください」と表示されているのは、ViewFlipperという単一のビューを表示するだけです。AsyncTaskが実行されるまで、ViewFlipperのフリップを制限できますか?

答えて

2

onPreExecute()に進捗状況ダイアログを表示し、onPostExecute()で却下してください。このようなもの

private class MyAsyncTask extends AsyncTask<Integer, Integer, Integer[]> { 
    private ProgressDialog myWait = null; 

    // This is on the UI thread itself 
    protected void onPreExecute() { 
     myWait = new ProgressDialog(MainActivity.this); 
     myWait.setMessage("Loading data, please wait"); 
     myWait.setCancelable(false); 
     myWait.show(); 
    } 

    // Separate worker thread is used here 
    protected Integer[] doInBackground(Integer...params) { 
     //do the database loading 
     return <your result - goes to onPostExecute>; 
    } 

    // This is on the UI thread itself 
    protected void onPostExecute(Integer[] resultCell) { 
     if (myWait != null) { 
      myWait.dismiss(); 
     } 
    } 
} 
+0

どのようにViewFlipper ViewGroupsをすべて別のレイアウトxmlに移動してViewFlipper onPostExecuteに展開したのか、それとも悪い考えですか? –

+0

進捗ダイアログが閉じられると、前に表示されたビューに戻ります。彼らが大丈夫であることを示しているならば、なぜあなたは再びそれらを膨らませたいのですか? –

1

はい、あなたはprogressDialogを利用することができます。これは好きですか?

私はAsynctaskで分かりません。それに応じてこのスニペットを修正してみてください。

+0

progressDialogは、ハンドラがそれを却下するまでUIとのすべてのやりとりを制限しますか? –

+1

スレッドが残りのアプリケーションと一緒に終了するようにしたいのであれば、作成後とスレッドを開始する前に 'Thread.setDaemon(true)'を呼び出すのがよい方法です。しかしながら。 source.rarは、あなたが指定したように、具体的に 'AsyncTask'を使用して以来、より良い答えをあなたの質問に提供しました。 –

+0

はい。 ProgressDialogは、タスクが完了するまでインタラクションを停止するために使用できます。それ以外の場合は、ProgressDialogのsetCancelable()をオーバーライドして必要なものを達成できます。 –

関連する問題