ProgressBar.setVisibility()在onActivityResult中不起作用

时间:2014-11-28 05:00:02

标签: android

在我的应用程序中,活动B从活动A启动。当活动B完成(应用程序返回到活动A)时,应用程序在onActivityResult()内运行功能C,这非常有效。

现在,我在Activity A中添加一个ProgressBar来指示Function C正在运行。在运行Function C之前,我将ProgressBar的可见性设置为View.VISIBLE,并在功能C完成时将其设置回View.INVISIBLE。

我的程序结构是:

private ProgressBar mProgressBar;

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ...

    mProgressBar = (ProgressBar) findViewById(R.id.progressbar);
    mProgressBar.setVisibility(View.INVISIBLE);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    mProgressBar.setVisibility(View.VISIBLE);

    if ((requestCode == REQUEST_CODE) && (resultCode == RESULT_OK)) {
        functionC();
    }

    mProgressBar.setVisibility(View.INVISIBLE);
}

但是,它不起作用:当Function C仍像以前一样运行时,ProgressBar永远不会出现。

我想知道我们是否被允许在onActivityResult()中操纵UI。如果没有,是否有解决方法?

任何解决此问题的建议都将受到赞赏。

功能C:

        firebase.authWithPassword(mLoginEmail, mPattern, new Firebase.AuthResultHandler() {
            @Override
            public void onAuthenticated(AuthData authData) {
                handleAuthenticated();
            }

            @Override
            public void onAuthenticationError(FirebaseError firebaseError) {
                showErrorDialog(firebaseError.toString());
            }
        });

不确定功能C是否对ProgressBar的可见性有任何影响。

3 个答案:

答案 0 :(得分:0)

尝试这样,

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if ((requestCode == REQUEST_CODE) && (resultCode == RESULT_OK)) {

           ((ProgressBar) findViewById(R.id.progressbar)).setVisibility(View.VISIBLE);

            functionC();
        }
    }

并在函数()中,

((ProgressBar) findViewById(R.id.progressbar)).setVisibility(View.INVISIBLE);

希望它会帮助你

答案 1 :(得分:0)

你无法达到进度条的感觉,直到你从网上取物或你的功能需要2 3秒才能完成大量操作

作为一个黑客,你可以有一个2 3秒的计时器,并启用和禁用进度条,如果你这样膝盖显示

答案 2 :(得分:0)

我在onActivityResult中遇到同样的问题,我将mProgressBar.setVisibility(View.VISIBLE)放在Handler中,它完美地运作

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

new Handler().post(new Runnable() {
                @Override
                public void run() {
                  mProgressBar.setVisibility(View.VISIBLE);
                }
            });


    if ((requestCode == REQUEST_CODE) && (resultCode == RESULT_OK)) {
        functionC();
    }  

}