2011-08-15 44 views
6

我想在listview加載時顯示ProgressDialog。我已經試過像下面的編碼,但它不起作用。在listview加載時顯示progressdialog

final ProgressDialog dialog = ProgressDialog.show(this, "indeterminate", "Please wait while loading", true); 
final Handler handler = new Handler() { 
    public void handleMessage(Message msg) { 
     dialog.dismiss(); 
     } 
    }; 
Thread checkUpdate = new Thread() { 
    public void run() { 
     // listview will be populated here  
     PopulateListView();   
     handler.sendEmptyMessage(0); 
     } 
    }; 
checkUpdate.start(); 

但它根本不起作用。

+0

您是否收到任何錯誤或什麼?問題是什麼 –

回答

1

ppshein ...我想你錯過了幾個電話。

1) new Thread(new Runnable() { 
2) super.handleMessage 
3) switch(msg.what) 

我已經工作的代碼here. 同樣的AsyncTask here.

4

我遇到了同樣在很久以前,但得到它解決了,遺憾的是,該代碼沒有評論,但任何疑問我會很高興幫助你。

這是爲填充ListView代碼無論從DB使用自定義適配器的一個ProgressDialog同時加載

public class whateverListActivity extends ListActivity 
{ 

    private ProgressDialog mProgressDialog = null; 
    private ArrayList<Whatever> mWhatevers = null; 
    private WhateverAdapter mAdapter; 
    private Runnable mViewWhatevers; 
    private SQLiteDatabase mDatabase; 
    private WhateverHelper mWhateverHelper; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.whatever_list); 
     mWhatevers = new ArrayList<Whatever>(); 
     mAdapter = new WhateverAdapter(this, R.layout.whatever_row, mWhatevers); 
     setListAdapter(this.mAdapter); 
     SQLiteOpenDataHelper helper = new SQLiteOpenDataHelper(this); 
     mDatabase = helper.getWritableDatabase(); 
     } 



    @Override 
    protected void onResume() { 
      try{ 
     super.onResume(); 
     mWhateverHelper = new WhateverHelper(this,mDatabase); 
     startGetWhatevers(); 
      } catch (Exception e) { 
       Log.e("BACKGROUND_PROC", e.getMessage()); 
       } 
    } 

    private void startGetWhatevers(){ 
      mViewWhatevers = new Runnable(){ 
       public void run() { 
        getWhatevers(); 
       } 
      }; 
      Thread thread = new Thread(null, mViewWhatevers, "Background"); 
      thread.start(); 
      mProgressDialog = ProgressDialog.show(this,  
       "Please wait...", "Retrieving data ...", true); 
    } 
    private void getWhatevers(){ 
     try{ 
      mWhatevers = new ArrayList<Whatever>(); 
      for (Whatever whatever : mWhateverHelper.getCurrentWhatevers()) { 
       mWhatevers.add(whatever); 
      } 
      Thread.sleep(1500); 
      Log.i("ARRAY", ""+ mWhatevers.size()); 
      } catch (Exception e) { 
      Log.e("BACKGROUND_PROC", e.getMessage()); 
      } 
      runOnUiThread(returnRes); 
     } 

    private Runnable returnRes = new Runnable() { 
     public void run() { 
      mAdapter.clear(); 
      if(mWhatevers != null && mWhatevers.size() > 0){ 
       mAdapter.notifyDataSetChanged(); 
       for(int i=0;i<mWhatevers.size();i++) 
       mAdapter.add(mWhatevers.get(i)); 
      } 
      mProgressDialog.dismiss(); 
      mAdapter.notifyDataSetChanged(); 
     } 
     }; 
} 

希望這有助於。 Alex。