Java 在后台工作时禁用所有UI元素
Android SDK中是否有一种方法允许我在后台执行任务时禁用所有UI元素,如Java 在后台工作时禁用所有UI元素,java,android,android-button,android-menu,Java,Android,Android Button,Android Menu,Android SDK中是否有一种方法允许我在后台执行任务时禁用所有UI元素,如按钮和菜单项 我目前在互联网上做一些工作,并显示一个ProgressBar,告知用户当前的进度 我是否应该为我所有的按钮和菜单项建立一个列表,并通过setEnabled方法更新它们在后台任务开始和结束时的状态 Android SDK中是否有允许我禁用所有功能的方法 在中执行任务时的UI元素,如按钮和菜单项 背景 我不记得SDK中存在这样的方法 我是否应该建立一个包含所有按钮和菜单项的列表 在后台任务开始和结束时,通过
按钮
和菜单项
我目前在互联网上做一些工作,并显示一个ProgressBar
,告知用户当前的进度
我是否应该为我所有的按钮
和菜单项
建立一个列表
,并通过setEnabled
方法更新它们在后台任务开始和结束时的状态
Android SDK中是否有允许我禁用所有功能的方法
在中执行任务时的UI元素,如按钮和菜单项
背景
我不记得SDK中存在这样的方法
我是否应该建立一个包含所有按钮和菜单项的列表
在后台任务开始和结束时,通过
设置启用的方法
我的建议是使用ProgressDialog
而不是当前的方法(该对话框还将阻止用户与UI交互,您只需禁用菜单)。如果启动后台工作程序并禁用所有UI视图,用户将看到有一些工作正在完成,并且他/她无法使用该应用程序。对我来说,这似乎令人困惑,而对话框
似乎是一个更好的解决方案,因为它清楚地表明用户必须等待工作完成。另一个选项是将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);
}
}
}
要禁用菜单项,请在后台工作即将开始时设置布尔标志,并使用该标志启用/禁用回调
onPrepareOptionMenu
中的菜单项。工作完成后,请记住还原标志,以便启用菜单。谢谢您的详细回答。您关于使用对话框的论点是有道理的。我将看到什么看起来更好,用户更清楚。目标是让应用程序从服务器刷新数据,类似于GMail应用程序中的按钮。但是,我想阻止用户做任何事情,只是查看当前状态。@mercutio我不熟悉GMail应用程序。您可以禁用视图,或者另一个选项是使用覆盖(例如,背景为透明浅灰色的FrameLayout
,这样用户可以看到UI被覆盖,但仍然可以看到(您必须吸收此级别的触摸事件))这将涵盖活动,并将包含进度条
(根据您当前的布局,这可能会很好/不好)。谢谢,我将尝试您描述的多种解决方案,看看哪种解决方案效果最好。
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);