我有一个活动,用户可以输入主机名、用户名和密码,然后单击“验证凭据”按钮。然后将检查凭据,这将需要一些时间。同时,用户既不能更改凭据,也不能再次单击“验证”。因此,像ProgressDialog这样的模态对话框似乎非常适合这一点。
不幸的是,ProgressDialog在方向更改等方面有着众所周知的限制。指南(UI/对话框)告诉我们要避免使用ProgressDialog,而是在布局中使用ProgressBar (如在进展和活动中)。这是什么意思?我应该用一个进度条来创建另一个活动吗?或者禁用所有输入字段并在其上放置一个进度条?我觉得很奇怪..。你喜欢什么解决方案?
发布于 2013-08-18 15:20:02
我用的最好的方法是:
放置一个ProgressBar就在登录Button旁边。
我在OnCreate方法中放置了一个进度条(其可见性设置为OnCreate)。
当用户单击Login/Submit按钮时,我将按钮的可见性设置为View.GONE,将ProgressBar的可见性设置为View.VISIBLE。
它看起来很好,用户在完成工作之前不能单击按钮,如果发生错误,请切换可见性以让用户再次尝试。
发布于 2013-08-18 17:16:21
就像@micro.pravi在他的回答中提到的那样,您可以在布局中实现ProgressBar。要在改变方向后保持状态,您必须使用onSaveInstanceState和onRestoreInstanceState来保存和恢复重要的值,即私有变量,如private boolean isChecking
public class MyActivity extends Activity {
public boolean isProcessing;
@Override
public void onCreate(Bundle stateBundle) {
super.onCreate(stateBundle);
// Set Layout
setContentView(R.layout.main);
if(stateBundle!=null) {
// read your data here from the bundle
isProcessing = stateBundle.getBoolean("isProcessing");
}
setUiState(isChecking);
}
@Override
protected void onRestoreInstanceState(Bundle stateBundle) {
// Second value of getBoolean is the default value
isProcessing = stateBundle.getBoolean("isProcessing", false);
super.onRestoreInstanceState(stateBundle);
}
@Override
protected void onSaveInstanceState(Bundle stateBundle) {
// Save the critical data
stateBundle.putString("isProcessing", isProcessing);
super.onSaveInstanceState(stateBundle);
}
@Override
protected onResume() {
setUiState(isProcessing);
}
private setUiState(boolean processing) {
textView.setEnabled(!processing);
button.setEnabled(!processing);
progressbar.setVisibility(processing?View.VISIBLE:View.GONE);
}
}这应该被用来保存任何关于方向改变的关键数据,或者当应用程序被杀死,然后被操作系统恢复。您不必保存TextView数据,因为defautl元素已经自己处理了。也不要以这种方式存储图像数据。相反,将Uri或路径存储到Url并在还原时加载它
发布于 2013-08-18 15:27:53
为了暂时解决问题,您可以继续使用Progress Dialog,并将这一行放在Manifest.xml文件中的Login Activity's标记中:
android:configChanges="orientation|keyboardHidden|screenSize"使用这一行代码不会影响Progress Dialog对方向的更改。但根据Android的文档,这被认为是一种错误的做法。
从长远来看,我建议您保留州的方向变化。
https://stackoverflow.com/questions/18300355
复制相似问题