ProgressDialog工作但没有进展图标(滚轮)

时间:2011-04-27 19:25:54

标签: android

我正在使用一个简单的progressDialog,运行正常,但车轮没有进展:

    //Progress Dialog
            final ProgressDialog dialog = ProgressDialog.show(TravelPharm.this, "Searching","Please wait ...", true);
            ((ProgressDialog) dialog)
            .setProgressStyle(ProgressDialog.BUTTON_NEUTRAL);

            final Handler handler = new Handler() {
                       public void handleMessage(Message msg) {
                          dialog.dismiss();
                          }
                       };
                    Thread checkUpdate = new Thread() {  
                       public void run() {

                          handler.sendEmptyMessage(0);
                          }
                       };
                    checkUpdate.start();

我错过了什么?

4 个答案:

答案 0 :(得分:1)

按如下方式创建进度对话框:

final ProgressDialog progress = new ProgressDialog(context);

添加一些文字/图标:

progress.setTitle("Loading");
progress.setMessage("Loading, please wait");
progress.setIcon(R.drawable.icon);

显示:

progress.show();

答案 1 :(得分:0)

我认为您应该将ProgressDialog.STYLE_SPINNER传递给ProgressDialog.setProgressStyle()方法。

答案 2 :(得分:0)

final ProgressDialog dialog = ProgressDialog.show(TravelPharm.this, "Searching","Please wait ...", true);

创建ProgressDialog的方式是正确的 - 如果微调器没有旋转,那么有些东西阻塞了你的UI线程。

出于兴趣,您为什么使用TravelPharm.this代替this?我不确定这是你问题的原因,我只是想知道为什么。

答案 3 :(得分:0)

我猜你是从一个对话框启动一个时间密集型的任务,然后在你试图解除对话框的处理程序中捕获线程退出。如果可能,请考虑在对话框完成后发送空消息。然后在处理程序中创建一个新的AsyncTask:

    private class MyAsynch extends AsyncTask<String, Void, String>{
        protected void onPreExecute() {
            resetProgress();
            progress.show();
        }
        @Override
        protected String doInBackground(String...strings) { // <== DO NOT TOUCH THE UI VIEW HERE
            // TODO Auto-generated method stub
            doNonUIStuff();
            return someString; // <== return value String result is sent to onPostExecute
        }
        protected void onPostExecute(String result){
            progress.dismiss();
            doSomethingWithString(result); // you could launch results dialog here
        }
    };
 protected void onPause() {
        super.onPause();
        if (asynch != null) {asynch.cancel(true);}
        if (progress != null){progress.cancel();}
    }

    private void resetProgress() {  // avoid frozen progress dialog on soft kill
        if (progress != null && progress.isShowing()){
            progress.cancel();
        }
        progress= new ProgressDialog(this);
        progress.setIndeterminate(true);
        progress.setMessage("I am thinking.");
    }

你可以在onPostExecute中返回任何类型,在这个例子中我返回一个字符串。另一种方法是使用startActivityForResult在onActivityResult中创建AsycnTask,将第二个Activity作为“对话框”启动。

换句话说,在对话框或第二个Activity中收集数据,然后在第一个活动中显示onPreExecute中的进度对话框,在后台执行时间密集型任务,并在onPostExecute中取消进度对话框。

我看过冻结的旋转球,因此调用了resetProgress()。