Android进度对话框视图未显示

时间:2010-12-02 11:28:59

标签: android

我已经开发了一个简单的AsyncTask类,它将Handler作为参数,并在doBackground中发送HandlersendEmptyMessage(0),我加载了ProgressDialoge加载视图,但由于某种原因它直到执行内部的东西才显示出来我的Handler对象(换句话说,progressDialogue最后会闪烁)。

这是我的AsyncTask:

package com.kc.util;

import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;

public class LoadDialoge extends AsyncTask<Handler, Integer, Void> {

    private ProgressDialog progressDialog;
    private String TAG = "LoadDialoge";
    private Context mContext;

    @Override
    protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub
        super.onPostExecute(result);
        progressDialog.dismiss();
    }

    @Override
    protected void onPreExecute() {
        // TODO Auto-generated method stub
        super.onPreExecute();
        showWait();
    }

    @Override
    protected Void doInBackground(Handler... params) {
        // TODO Auto-generated method stub
        for(Handler mHandler : params){
            mHandler.sendEmptyMessage(0);
            Log.d(TAG, "handler sending message" );
        }
        return null;
    }

    private void showWait() {
        Log.d(TAG, "showWait");
        progressDialog = new ProgressDialog(mContext);
        progressDialog.setTitle("Retrieving contact details");
        progressDialog.setMessage("Please wait...");
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.show();
        Log.d(TAG, "    ");
    }

    public void setmContext(Context mContext) {
        this.mContext = mContext;
    }



}

这是我从一个Activity传递给这个类的处理程序:

private Handler mHandler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            // TODO Auto-generated method stub
            super.handleMessage(msg);
            Log.d(TAG, "handleMessage");
            initialiseOnItemClickListeners();
            initialiseOnClickListeners();
            initialiseListViewAdapters();
            loadDataToDb();
            initializeTitles();
            initialize();
        }

    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.abstract_main_menu);

        LoadDialoge load = new LoadDialoge();
        load.setmContext(this);
        load.execute(mHandler);

    }

我试图创建一个通用的异步加载屏幕,该屏幕适用于任何想要使用它的活动,而不是在每个活动中复制和粘贴上面的LoadDialogue AsyncTask(我以前做过并且工作正常)。

1 个答案:

答案 0 :(得分:1)

不是太惊讶它“眨眼”是吗?你的doInBackground()几乎什么都没做......任务将立即完成。如果您想伪造在后台任务中实际进行某些处理或等待,请尝试使用sendEmptyMessageDelayed()代替sendEmptyMessage()