0

我有一个活动,用户可以输入主机名、用户名和密码,然后单击“验证凭据”按钮。然后将检查凭据,这将需要一些时间。与此同时,用户既不能更改凭据也不能再次单击“验证”。因此,像ProgressDialog这样的模态对话框似乎非常适合。

不幸的是, ProgressDialog 在方向更改等方面存在众所周知的限制。指南(UI/Dialogs)告诉我们要完全避免 ProgressDialog 并在布局中使用 ProgressBar (如在Progress & Activity中)。这是什么意思?我应该只用一个进度条创建另一个活动吗?或者禁用所有输入字段并在其顶部放置一个进度条?对我来说听起来很奇怪......你首选的解决方案是什么?

4

3 回答 3

3

我使用的最好的东西是:

ProgressBar在 Login 旁边放一个Button

View.GONE在该方法旁边放了一个进度条(其可见性设置为 )OnCreate

当用户单击 Login/Submit 按钮时,我将按钮的可见性设置View.GONEProgressBarto View.VISIBLE

看起来不错,用户在工作完成之前无法点击按钮,如果发生错误,切换可见性让用户重试

于 2013-08-18T15:20:02.813 回答
1

就像他的回答中提到的@micro.pravi 一样,您可以ProgressBar在布局内部实现。要在方向更改后保持状态,您必须使用onSaveInstanceStateonRestoreInstanceState保存和恢复重要值,即私有变量,如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数据,因为默认视图元素已经自己处理了这个。也不要以这种方式存储图像数据。而是存储 Uri 或 URL 的路径并在还原时加载它

于 2013-08-18T17:16:21.313 回答
-1

为了暂时解决您的问题,您可以继续使用Progress Dialog并将此行放在文件中的Login Activity's标记中 Manifest.xml

android:configChanges="orientation|keyboardHidden|screenSize"

使用这行代码不会影响Progress Dialogon 方向的变化。但根据 Android 开发文档,这被认为是错误的做法。

从长远来看,我建议您保留状态以更改方向。

于 2013-08-18T15:27:53.953 回答