我已经知道在执行后台操作时如何使用进度对话框。但我的问题是当我动态膨胀巨大的布局时,如何显示进度对话框。
由于我无法在另一个线程中膨胀视图,因此我使用的是主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.
我基本上是在寻找基于用户操作的动态布局更改。所以除了创建动态视图之外,我没有任何其他方法。谁能建议我一个有用的想法。
答案 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/
希望这有助于......: - )