Android SDK中是否有方法允许我在后台执行任务时禁用所有UI元素,例如Buttons
和MenuItems
?
我目前在互联网上做一些工作并显示ProgressBar
通知用户当前进度。
我应该只构建List<>
和Buttons
的{{1}}并通过MenuItems
方法在后台任务的开始和结束时更新其状态吗?< / p>
答案 0 :(得分:2)
Android SDK中是否有方法允许我禁用所有方法 我执行任务时的UI元素,如Buttons和MenuItems 背景?
我不记得SDK中存在这样的方法。
我应该只构建一个List&lt;&gt;我所有的按钮和MenuItems和 通过在后台任务的开始和结束更新他们的状态 setEnabled方法?
我的建议是使用ProgressDialog
代替您当前的方法(该对话框还会阻止用户与UI进行交互,您只需要禁用菜单)。如果启动后台工作程序并禁用所有UI视图,用户将看到正在完成一些工作,并且他/她也无法使用该应用程序。对我来说这似乎令人困惑,Dialog
似乎是一个更好的解决方案,因为它清楚地表明用户必须等到工作完成。另一个选项是将ProgressBar
放置在覆盖活动的叠加层中,这样用户仍可以看到以下用户界面,如果这是您想要的。
要禁用所有视图,我将使用如下所示的方法:
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
中的菜单项。工作完成后,请记住恢复标志,以便启用菜单。