Android 自定义UI时显示进度对话框

Android 自定义UI时显示进度对话框,android,progressdialog,Android,Progressdialog,我已经知道如何在执行后台操作时使用进度对话框。但我的问题是,当我动态膨胀一个巨大的布局时,如何显示进度对话框 因为我不能在另一个线程中膨胀视图,所以我使用的是主UI线程。由于这个原因,“我的进度”对话框没有获得优先权,也没有显示。我的UI会挂起几秒钟,直到完全加载为止。我试过几种方法,但似乎都不管用 progress.show(context,"","inflating UI..."); setNewContent(R.layout.my_profile,R

我已经知道如何在执行后台操作时使用进度对话框。但我的问题是,当我动态膨胀一个巨大的布局时,如何显示进度对话框

因为我不能在另一个线程中膨胀视图,所以我使用的是主UI线程。由于这个原因,“我的进度”对话框没有获得优先权,也没有显示。我的UI会挂起几秒钟,直到完全加载为止。我试过几种方法,但似乎都不管用

        progress.show(context,"","inflating UI...");   
        setNewContent(R.layout.my_profile,R.id.my_profile_menu_button,R.id.my_profile_all_elements_layout);
                populateProfileList(); //Dynamic nested layouts being inflated.

我基本上是在寻找基于用户操作的动态布局更改。因此,除了创建动态视图,我没有其他方法。谁能给我提个有用的主意吗

您需要使用处理程序才能与UI线程对话

//in some thread
uiHandler.sendEmptyMessage(1);

...
Handler uiHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            if(msg.what == 1) {
                //do somestuff
            }
        }
    };

使用异步任务对我来说是更好的主意,当你们必须在后台做一些事情,而进度对话框显示在屏幕上,然后当后台任务完成时,更新UI。。。如需参考,请点击链接


希望这有帮助…:-)

我的ui线程也有类似的问题。我想在运行时为布局添加更多视图,我想显示一个ProgressDialog来通知用户这可能需要一段时间。我用AsyncTask尝试过,但唯一的机会是将我的ui方法实现到AsyncTask的onPostExecute方法中。但这只是冻结了ProgressDialog,因为ProgressDialog甚至可以在ui线程上工作。我找到了一个解决方案,也许不是最好的,但它是有效的。在开始ui操作之前,我先干杯。然后,我创建了一个带有处理程序的线程,并延迟了执行。ui操作完成后,我展示了一个新的祝酒词。延迟线程,给吐司足够的时间来显示:

    Toast.makeText(ActivityContext.this,
                  R.string.start_message,
          Toast.LENGTH_SHORT).show();

    final Handler uiHandler = new Handler();

    final Thread uiThread = new Thread(new Runnable() {

              @Override
           public void run() {

    uiHandler.postDelayed(new Runnable() {

              @Override
          public void run() {

              yourUIAction();

              Toast.makeText(
                  ActivityContext.this,
                  R.string.finish_message,
                  Toast.LENGTH_SHORT).show();                        

                            }
                          }, 100);
                  }
                });
     uiThread.start();

我知道我可以使用处理器。我还使用了handles来更新用户界面。但此时progressDialog刚刚挂断。它不再旋转,使它看起来更难看。因此,如果你将progressDialog放在一个新线程中并启动它,然后调用处理程序使布局膨胀,这不应该起作用吗?我尝试过,如果我以这种方式尝试,进度轮不会旋转。你能发布setNewContent方法吗请仔细阅读问题。我不是在做背景动作。我正在使用主UI线程更新UI。我不能使用背景线程。好吧,你可以利用同样的想法。。。在BG中膨胀UI并在前面显示微调器,当膨胀功能结束执行时,移除微调器。