Android Studio:没有线程或多处理的进度条

Android Studio: Progress Bar without thread or multiprocessing

大家好,这是我在 Whosebug 上的第一个 post,我有一个关于 Android Studio 的非常具体的问题。我想实现一种允许我启动进度条的方法 - 在它完成之前等待几秒钟 - 然后结束它。

我想在不使用线程或多进程的情况下创建此方法。

我不是 java 方面的真正专家,我不明白为什么我的方法不能 work/doesn 编译!

这是方法的代码:

    public void RunProgressBar(){
        int counter = 0;
        while(counter < progressBar.getMax()){
            progressBar.setProgress(counter);
            SystemClock.sleep(200);
            counter++;
        }
    }

该方法用于:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    progressBar.RunProgressBar();
}

如果我还添加了 MainActivity 的所有代码

package com.xedoll.green_player;
import android.os.SystemClock;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.ProgressBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    ProgressBar progressBar;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        progressBar = (ProgressBar) findViewById(R.id.progressBar);
        progressBar.RunProgressBar();
    }

    public void RunProgressBar(){
        int counter = 0;
        while(counter < progressBar.getMax()){
            progressBar.setProgress(counter);
            SystemClock.sleep(200);
            counter++;
        }
    }
}

快速评论 - 在 Java 中,方法以小写字母开头,这意味着您的方法 RunProgressBar() 应命名为 runProgressBar()。这是一个约定,遵循它们通常会使代码更具可读性。

这里的问题是您试图在 ProgressBar 的实例上调用 RunProgressBar()。您的自定义方法 RunProgressBar() 属于 MainActivity class。这意味着行 progressBar.RunProgressBar() 应更改为 RunProgressBar()this.RunProgressBar().

我看到的第二个问题是您正在实施 View.OnClickListener,但没有 @Override 方法 public void onClick(View v)

排序后代码应该可以编译。

感谢 EMakarovas 的帮助和建议,它有效! 我重新发明了该方法,使其适用于几乎所有进度条!

这里有代码给需要的人!

public void runProgressBar(ProgressBar p, int delay){
        int counter = 0;
        while(counter < p.getMax()){
            p.setProgress(counter);
            SystemClock.sleep(delay);
            counter++;
        }
}