0

我在让 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 中的动画没有旋转,几乎使它变得无用。

我究竟做错了什么?

4

3 回答 3

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

        });
    }
});
于 2012-04-22T14:23:22.137 回答
0

因为您将处理对话框放在错误的区域,例如我的错误:我有两个活动:MainActivityShowingActivity, MainActivity 将在新意图转移到 ShowingActivity 后显示处理对话框, ShowingActivity 将从服务器获取一些数据(它将是在这里屏蔽)。当我在 MainActivity 中调用 ProcessingDialog 时,它显示但没有旋转,因为我的 Intent 移动到 ShowingActivity 并且它阻止了 Ui,因为从服务器获取数据的操作必须等待几秒钟。所以我修复了它: 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,因为 MainActivity 在获取 DATA 后仍在运行。在 ShowingActivity 中我将使用这个 DATA(因为我设置 DATA 是一个静态字符串)。

于 2015-02-04T11:20:38.603 回答
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 不起作用

于 2014-07-14T02:32:31.543 回答