Android:ProgressDialog没有旋转

时间:2012-04-22 12:29:01

标签: android multithreading progressdialog

我在使用ProgressDialog车轮旋转方面遇到了问题。这是我的代码:

final ProgressDialog dialog = ProgressDialog.show(this, "", "Loading...", true, false);
Thread thread=new Thread(new Runnable(){
    public void run(){
    runOnUiThread(new Runnable(){
        @Override
        public void run() {
            if(dialog.isShowing())
                // starts a foreground service, does database stuff, 
                // sets up a spinner with values
                dialog.dismiss();
            }

        });
    }
});

thread.start();

一切都按计划进行,我得到了ProgressDialog,后台发生了一些事情,一旦设置,ProgressDialog就消失了 - 唯一的问题是ProgressDialog中的动画没有旋转,几乎让它变得无用。

我做错了什么?

3 个答案:

答案 0 :(得分:1)

您在此处省略的代码

        // starts a foreground service, does database stuff, 
        // sets up a spinner with values

必须做一些阻止UI线程的事情。只需将它们放在runOnUiThread()方法之外。

Thread thread=new Thread(new Runnable(){
    public void run(){
        // starts a foreground service, does database stuff, 
        // sets up a spinner with values
        runOnUiThread(new Runnable(){
            @Override
            public void run() {
            if(dialog.isShowing())
                dialog.dismiss();
            }

        });
    }
});

答案 1 :(得分:0)

使用处理程序android

的ProgressDialog示例
    final ProgressDialog dialog = ProgressDialog.show(this, "Title",
            "Message", true);

    final Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            dialog.dismiss();
        }
    };
    Thread t = new Thread() {
        public void run() {
            // write process code here.

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

修复问题:ProgressDialog无法正常工作

答案 2 :(得分:0)

因为您将处理对话框放入了错误的区域,例如我的错误: 我有两个活动: MainActivity ShowingActivity ,MainActivity将在新的意图转移到ShowingActivity后显示处理对话框,而ShowingActivity将从服务器获取一些DATA(它将在此处被阻止) 。当我在MainActivity中调用ProcessingDialog时,它显示但不是旋转,因为我的Intent转移到ShowingActivity并阻止Ui,因为从服务器获取DATA的操作必须等待几秒钟。所以我修好了: 1 /在MainActivity调用中:

final Intent working = new Intent(getApplicationContext(),
                    WorkingActivity.class);
final ProgressDialog ringProgressDialog = ProgressDialog.show(
                    MainActivity.this, "Please wait ...", "Connecting ...",
                    true);
ringProgressDialog.setCancelable(false);
new Thread(new Runnable() {
                        @Override
                        public void run() {
                            //Menthod need time to load:
                                    getDatafromServer();
                             if (BookListFragment.isLoaded) {
                                ringProgressDialog.dismiss();
                                startActivity(working);
                                return;
                             }
});

所以它不会阻止Ui,因为在获得DATA之后MainActivity仍在运行。 在ShowingActivity中,我将使用此DATA(因为我设置DATA是一个静态字符串)。