Buttons
Android SDK 中是否有一种方法允许我禁用所有 UI 元素,例如MenuItems
在后台执行任务时?
我目前在互联网上做一些工作,并显示一个ProgressBar
通知用户当前进度的信息。
我是否应该通过该方法在后台任务的开始和结束时构建List<>
我所有的Buttons
and并更新它们的状态?MenuItems
setEnabled
Buttons
Android SDK 中是否有一种方法允许我禁用所有 UI 元素,例如MenuItems
在后台执行任务时?
我目前在互联网上做一些工作,并显示一个ProgressBar
通知用户当前进度的信息。
我是否应该通过该方法在后台任务的开始和结束时构建List<>
我所有的Buttons
and并更新它们的状态?MenuItems
setEnabled
Android SDK 中是否有一种方法允许我在后台执行任务时禁用所有 UI 元素,例如按钮和菜单项?
我不记得 SDK 中存在这种方法。
我是否应该只构建一个 List<> 的所有按钮和 MenuItems 并通过 setEnabled 方法在后台任务的开始和结束时更新它们的状态?
我的建议是使用 aProgressDialog
而不是您当前的方法(对话框还将阻止用户与 UI 交互,您只需禁用菜单)。如果您启动后台工作人员并禁用所有 UI 视图,用户将看到正在完成一些工作,并且他/她无法使用该应用程序。对我来说,这似乎令人困惑,而且Dialog
似乎是一个更好的解决方案,因为它清楚地表明用户必须等到工作完成。另一种选择是将其放置ProgressBar
在覆盖活动的叠加层中,这样如果这是您想要的,用户仍然可以看到下面的 UI。
要禁用所有视图,我将使用如下方法:
private void changeViewsState(ViewGroup parent, boolean state) {
int count = parent.getChildCount();
for (int i = 0; i < count; i++) {
View child = parent.getChildAt(i);
if (child instanceof ViewGroup) {
changeViewsState((ViewGroup) child, state);
} else if (child instanceof View) {
child.setEnabled(state);
}
}
}
传递系统的内容面板 ( changeViewsState((ViewGroup) findViewById(android.R.id.content), false);
) 或活动布局的根:
ViewGroup root; // root is a reference of the root of your content view
// in the onCreate method
root = (ViewGroup) getLayoutInflater().inflate(R.layout.your_activity_layout_file, null);
// later use it:
changeViewsState(root, false);
要禁用菜单项,请在后台工作即将开始时设置一个布尔标志,并使用该标志在回调中启用/禁用菜单项onPrepareOptionMenu
。工作完成后,请记住恢复标志,以便启用菜单。