单击菜单项时,我需要更新多个EditText视图。代码是这样的。在此过程中,我想显示进度对话框。
.filter()
有时会出现进度对话框,有时则不会出现。大多数情况下,它第一次出现并且没有出现。它第二次挂断了。
如果在所有对话框中显示它没有旋转,它看起来像一些静态图像。
问题1)如何使此对话框始终显示? 问题2)如何进行旋转?
注意:我尝试将progressDialog.Dismiss()保留在另一个RunOnUiThread()内部以及线程外部。两种方式都失败了。
答案 0 :(得分:4)
我怀疑你的for (int i = 0; i < 100; i++)
循环发生得如此之快,以至于UI没有机会更新屏幕。尝试添加await Task.Delay (50);
来模拟Thread
中发生的更多工作。
new Thread (new ThreadStart (delegate {
RunOnUiThread (async() => {
for (int i = 0; i < 100; i++) {
// Simulate some work here in order for the progress spinner to update
await Task.Delay (50);
//eTxt[i].Text = slnArray[i].ToString();
}
progressDialog.Dismiss ();
}
);
})).Start ();
注意:除非Thread
中的某些内容实际更新了UI的内容,否则您可以删除RunOnUiThread
代理,因为它不需要。
new Thread (new ThreadStart (async delegate {
for (int i = 0; i < 100; i++) {
// Simulate some work here in order for the progress spinner to update
await Task.Delay (50);
//eTxt[i].Text = slnArray[i].ToString();
}
RunOnUiThread (() => {
progressDialog.Dismiss ();
});
})).Start ();
即使对话解雇也不需要包装,因为对话框的Activity / Fragment解雇使UI无效,操作系统会在下一帧抽奖时更新它:
new Thread (new ThreadStart (async delegate {
for (int i = 0; i < 100; i++) {
// Simulate some work here in order for the progress spinner to update
await Task.Delay (50);
//eTxt[i].Text = slnArray[i].ToString();
}
progressDialog.Dismiss ();
})).Start ();