【问题标题】:display progressdialog while listview is loading加载列表视图时显示进度对话框
【发布时间】:2011-08-15 02:48:39
【问题描述】:

我想在加载列表视图时显示 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();

但它根本不起作用。

【问题讨论】:

  • 您是否遇到任何错误或什么?有什么问题

标签: android


【解决方案1】:

我很久以前遇到过同样的问题,但已经解决了,很抱歉代码没有注释,但有任何疑问我很乐意帮助你。

这是在加载时使用自定义适配器和 ProgressDialog 从数据库中填充 ListView 的代码

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();
        }
      };
}

希望这会有所帮助。 亚历克斯。

【讨论】:

    【解决方案2】:

    ppshein... 我想你错过了几个电话。

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

    我有工作代码here. 还有 AsyncTask here.

    【讨论】:

      猜你喜欢
      • 2013-04-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-22
      相关资源
      最近更新 更多