ProgressBar在达到100%后会等待片刻吗?

问题描述 投票:1回答:2

我第一次接触ProgressDialog,所以我没有经验。但是对于API 26它已被弃用,我们应该使用ProgressBar代替。这是我的简单实现(上传到Firebase存储):

sR.putFile(mFilePath)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        mProgressBar.setProgress(0);
                        Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_SHORT).show();
                        Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),
                                taskSnapshot.getDownloadUrl().toString());
                        String uploadId = mDatabase.push().getKey();
                        mDatabase.child(uploadId).setValue(upload);
                    }
                })
                .addOnFailureListener(new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        Toast.makeText(MainActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
                    }
                })
                .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                        double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                        mProgressBar.setProgress((int) progress);
                    }
                });

问题:

  1. 如您所见,我在onSucess方法中将ProgressBar重置为0,这使得ProgressBar从未在视觉上达到100%。这是正确的方法还是应该延迟重置,所以用户会看到100%片刻?我没有发现最佳做法。
  2. 只要上传正在运行,我应该禁用上传按钮吗?

编辑:

这足以延迟进度条吗?

sR.putFile(mImageUri)
                .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                    @Override
                    public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                        final Handler handler = new Handler();
                        handler.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                mProgressBar.setProgress(0);
                            }
                        }, 500);

                        Toast.makeText(MainActivity.this, "Upload successful", Toast.LENGTH_SHORT).show();
                        Upload upload = new Upload(mEditTextFileName.getText().toString().trim(),
                                taskSnapshot.getDownloadUrl().toString());
                        String uploadId = mDatabase.push().getKey();
                        mDatabase.child(uploadId).setValue(upload);
                    }
                })
android firebase progressdialog
2个回答
2
投票

用户界面越好用户界面越好,他对应用程序质量的总体评价就越高。

  1. 我想你应该。在隐藏它们之前,我总是让条形显示100%约300毫秒(动画:300毫秒动画持续时间)。我认为它比直接隐藏它们更加用户友好。
  2. 您应该在上传时更好地禁用上传按钮(更好),或者在点击时告诉用户上传正在进行。

1
投票

由于你不能在5分钟后编辑评论或在评论中发布代码,这里更好地解释了我在评论中说的内容,我无法保存...

我的意思是这样的:

class AsyncController implements Runnable {
    public static final long DefaultDelay = 300;

    private final Handler mainThreadHandler;
    private final Runnable runIfFinished;
    private final long delay;

    public AsyncController(Handler mainThreadHandler, Runnable runIfFinished, long delayMS) {
        this.mainThreadHandler = mainThreadHandler;
        this.runIfFinished = runIfFinished;
        this.delay = delayMS > -1 ? delayMS : DefaultDelay;
    }

    public void run () {
        // do async stuff
        if (mainThreadHandler!=null && runIfFinished!=null) {
            mainThreadHandler.postDelayed(runIfFinished, delay);
        }
    }
}

class YourActivity extends Activity {

(... Methods ...)

    public onClick (View v) {
        AsyncController ac=new AsyncController(new Handler(), new Runnable(){
            public void run() {
                // hide progress bar
            }
        }, 300);
        new Thread(ac).start();
    }

(... Methods ...)

}

但是如果您使用Android的AsyncTask,这是很多您不需要键入的样板代码。考虑查找一个教程并使用它。你唯一要做的就是创建处理程序并发布你的runnable延迟,这会隐藏你的进度条。

© www.soinside.com 2019 - 2024. All rights reserved.