我們做的很多應(yīng)用程序,很多功能都需要較長的加載時(shí)間,比如下載功能,轉(zhuǎn)換頁面等等。在程序進(jìn)行后臺處理的時(shí)候,前臺的ui是沒有反應(yīng)的。如果在這段時(shí)間內(nèi)我們不作任何處理就讓程序停在那的話。第一,用戶體驗(yàn)會很差。第二,如果用戶在這段時(shí)間內(nèi)不耐煩開始對界面猛點(diǎn)(我相信長時(shí)間程序沒響應(yīng)大家都會這么做),那么很可能使程序掛掉。所以我們需要在程序加載時(shí)彈出加載對話框,解決以上兩個(gè)問題。
先給大家看一下效果圖:
顯示最新帖子界面:
點(diǎn)擊最熱按鈕,跳轉(zhuǎn)到顯示最熱帖子頁面,在加載時(shí)彈出加載對話框:
加載完畢后,變成了最熱頁面:
Java代碼
- progressdialog=ProgressDialog.show(HTTPRequestActivity.this, "Loading...", "Please wait...",true,false);
這當(dāng)中progressdialog是一個(gè)ProgressDialog的對象,show的參數(shù)依次為上下文,Dialog要顯示的標(biāo)題,Dialog顯示的信息,第三個(gè)參數(shù)確定進(jìn)度條是否為不確定,第四個(gè)確定是否可以被取消。至于你還想要設(shè)置它的其他屬性,可以去查一下文檔,里面有很多設(shè)置屬性的函數(shù),你可以通過這些函數(shù)把對話框改成你想要的樣子。
然后我們要解決的一個(gè)問題就是如何在程序加載成功之后讓對話框消失,顯示新的頁面內(nèi)容。
代碼如下:
Java代碼
- Handler dialoghandle=new Handler(){
- @Override
- public void handleMessage(Message msg) {
- // TODO Auto-generated method stub
- super.handleMessage(msg);
- progressdialog.dismiss();
- }
- };
首先定義一個(gè)Handler對象,重載其handlemessage方法,在這里面讓ProgressDialog消失。
下面我以“最熱”按鈕為例,“最新”按鈕和其基本一致。
Java代碼
- hotest.setOnClickListener(new OnClickListener(){
- @Override
- public void onClick(View v) {
- // TODO Auto-generated method
- newest.setClickable(true);
- hotest.setClickable(false);
- progressdialog=ProgressDialog.show(HTTPRequestActivity.this, "Loading...", "Please wait...",true,false);
- seturl("http://www.bling0.com/all/hottest/day.json");
- new Thread(){
- public void run(){
- CallWebService(geturl());
- listadapter=new SimpleAdapter(HTTPRequestActivity.this,Hotlist ,R.layout.user,new String[]{"title","group","photo","username"},new int []{R.id.title,R.id.group,R.id.photo,R.id.username});
- dialoghandle.post(new Runnable(){
- public void run()
- {
- <span style="white-space: pre;"> </span>setListAdapter(listadapter);
- dialoghandle.sendEmptyMessage(0);
- }
- });
- }
- }.start();
- }
- });
- }