“登录”活动:ProgressDialog替代方案

时间:2013-08-18 14:55:12

标签: android

我有一个活动,用户可以输入主机名,用户名和密码,然后点击“验证凭据”按钮。然后将检查凭据,这将花费一些时间。在此期间,用户既不能更改凭据也不能再次单击“验证”。因此,像 ProgressDialog 这样的模态对话框似乎是完美的。

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

3 个答案:

答案 0 :(得分:3)

我使用的最好的事情是:

在登录ProgressBar旁边放置Button

我在View.GONE方法中放置了一个进度条(其可见性设置为OnCreate)。

当用户点击“登录/提交”按钮时,我将按钮的可见性设置为View.GONE,并将ProgressBar的可见性设置为View.VISIBLE

它看起来不错,用户无法点击按钮直到工作完成,如果发生错误,切换可见性以让用户再试一次

答案 1 :(得分:1)

answer中提到的@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数据,因为defautl View元素已经自行处理。也不要以这种方式存储图像数据。而是将Uri或路径存储到Url并在恢复时加载它

答案 2 :(得分:-1)

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

android:configChanges="orientation|keyboardHidden|screenSize"

使用此行代码不会影响Progress Dialog方向更改。但根据Android Development的文档,这被认为是错误的做法。

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