2010-10-30 60 views
1

我使用SQLite顯示一些數據。當我點擊一個按鈕數據來自數據庫。這需要一些時間。那時屏幕是黑色的。那時我想在數據顯示之前顯示旋轉微調器。有任何想法嗎?在顯示數據前顯示旋轉進度

回答

1

的Android爲實現你想要的東西提供了一個ProgressDialog

0

您不應該在UI線程中執行長時間運行的任務,因爲這會阻止UI重繪並使應用程序看起來沒有響應。

使用AsyncTask在後臺執行長時間運行的任務,同時仍然更新屏幕。

1

首先我想建議看看 AsyncTask頁面,以便您準確瞭解 AsyncTask

現在,實現的AsyncTask,如下所示:

@Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     new performBackgroundTask().execute(); 
    } 

    private class performBackgroundTask extends AsyncTask <Void, Void, Void> 
    { 
      private ProgressDialog Dialog = new ProgressDialog(main.this); 

      protected void onPreExecute() 
      { 
       Dialog.setMessage(getString("Please wait...")); 
       Dialog.show(); 
      } 

      protected void onPostExecute(Void unused)  
      { 
       Dialog.dismiss();  
       // displaying all the fetched data 
      } 

      @Override 
      protected Void doInBackground(Void... params) 
      { 
       // implement long-running task here i.e. select query/fetch data from table 
       // fetch data from SQLite table/database 
       return null; 
      } 
    } 

享受!

0

你可以看一下標準的音樂選擇器爲如何做到這一點了一個例子: https://android.googlesource.com/platform/packages/apps/Music/+/master/src/com/android/music/MusicPicker.java

除了整個「查詢必須關閉主UI線程來完成,」這說明而一個超靜定進度首先加載其數據,一旦數據可用,即會退出列表。開始查詢的功能是在這裏:
https://android.googlesource.com/platform/packages/apps/Music/+/master/src/com/android/music/MusicPicker.java#581

並做開關是在這裏:
https://android.googlesource.com/platform/packages/apps/Music/+/master/src/com/android/music/MusicPicker.java#569

佈局已經形成一個框架佈局與另一容器中的列表視圖保持進度指示器和標籤。這些可見度變化,控制列表或進度指示器是否顯示:

https://android.googlesource.com/platform/packages/apps/Music/+/master/res/layout/music_picker.xml