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

时间:2012-02-28 04:31:05

标签: android progressdialog

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

由于我无法在另一个线程中膨胀视图,因此我使用的是主UI线程。由于这个原因,我的进度对话框没有获得优先权,也没有显示出来。我的UI挂起几秒钟,直到它完全加载。我尝试了几个approcahes,但似乎都没有。

        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.

我基本上是在寻找基于用户操作的动态布局更改。所以除了创建动态视图之外,我没有任何其他方法。谁能建议我一个有用的想法。

3 个答案:

答案 0 :(得分:2)

我遇到了与ui-thread类似的问题。我想在运行时为我的布局添加很多视图,我想显示一个ProgressDialog来通知用户,它可能需要一段时间。我曾尝试使用AsyncTask,但唯一的机会就是将我的ui-methods实现到AsyncTecute-AsyncTask的方法中。但这只会冻结ProgressDialog,因为ProgressDialog甚至可以在ui-thread上运行。我找到了一个解决方案,也许不是最好的,但它确实有效。在开始ui-action之前,我展示了Toast。然后,我创建了一个带有处理程序的Thread并延迟了执行。在完成ui-action之后,我展示了一个新的Toast。延迟线程,让Toast有足够的时间显示:

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

答案 1 :(得分:0)

您需要使用处理程序才能与UI线程交谈

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

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

答案 2 :(得分:0)

使用Async Task对我来说更好,当你必须在后台做某事时,进度对话框出现在屏幕上然后当后台任务完成时,更新UI ...供参考请点击链接...

http://labs.makemachine.net/2010/05/android-asynctask-example/

希望这有助于......: - )