首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >“登录”活动: ProgressDialog备选方案

“登录”活动: ProgressDialog备选方案
EN

Stack Overflow用户
提问于 2013-08-18 14:55:12
回答 3查看 3.1K关注 0票数 0

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

不幸的是,ProgressDialog在方向更改等方面有着众所周知的限制。指南(UI/对话框)告诉我们要避免使用ProgressDialog,而是在布局中使用ProgressBar (如在进展和活动中)。这是什么意思?我应该用一个进度条来创建另一个活动吗?或者禁用所有输入字段并在其上放置一个进度条?我觉得很奇怪..。你喜欢什么解决方案?

EN

回答 3

Stack Overflow用户

发布于 2013-08-18 15:20:02

我用的最好的方法是:

放置一个ProgressBar就在登录Button旁边。

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

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

它看起来很好,用户在完成工作之前不能单击按钮,如果发生错误,请切换可见性以让用户再次尝试。

票数 3
EN

Stack Overflow用户

发布于 2013-08-18 17:16:21

就像@micro.pravi在他的回答中提到的那样,您可以在布局中实现ProgressBar。要在改变方向后保持状态,您必须使用onSaveInstanceStateonRestoreInstanceState来保存和恢复重要的值,即私有变量,如private boolean isChecking

代码语言:javascript
复制
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并在还原时加载它

票数 1
EN

Stack Overflow用户

发布于 2013-08-18 15:27:53

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

代码语言:javascript
复制
android:configChanges="orientation|keyboardHidden|screenSize"

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

从长远来看,我建议您保留州的方向变化。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18300355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档