在聯網獲取數據時,用一個進度條提示用戶正在加載數據,如下講一下我是如何實現這種效果的。
因爲Android的界面更新只能經過本身的UI線程進行操做,因此咱們須要用到Handler在進行更新界面的操做。
一、聲明變量
private Handler handler = new Handler();
private ProgressDialog progressDialog = null;服務器
二、在開始進行網絡鏈接時顯示進度條對話框
progressDialog = ProgressDialog.show(MyActivity.this, "請稍等...", "獲取數據中...", true);網絡
三、在handler.post中進行界面更新
public void setListAdapter(){
handler.post(new Runnable() {
public void run() {
//將獲取到的數據更新到列表中
MyListView.setAdapter(saImageItems);
}
}
});ide
四、開個新的線程進行網絡鏈接獲取數據
new Thread(new Runnable(){
佈局
@Override
public void run() {
// TODO Auto-generated method stub
//向服務器請求數據
mapList=MyAPI.getAllDatas();
setListAdapter(mapList);
//更新完列表數據,則關閉對話框
progressDialog.dismiss();
}}).start();post
整個過程就這樣完成了,下面是效果圖:this
還有另一種進度條的提示,是在對話框的標題上有圓形進度條進行提示。
一、不能將Activity佈局設計爲無標題;
並在setContentView()以前設置一下標題佈局形式:
requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);spa
二、在鏈接網絡前,設置進度條爲可視狀態
setProgressBarIndeterminateVisibility(true);線程
三、開一個新的線程向服務器請求數據,獲取數據後,將進度條設爲不可視狀態
new Thread(new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
try {
todosomething();
setProgressBarIndeterminateVisibility(false);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}}).start();設計