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

时间:2016-11-27 11:51:45

标签: java android android-studio progress-bar

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

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

我不是java的真正专家,我无法弄清楚为什么我的方法不起作用/不能编译!

这是方法代码:

    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++;
        }
    }
}

2 个答案:

答案 0 :(得分:2)

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

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

我看到的第二个问题是你正在实现View.OnClickListener,但你并不是@Override方法public void onClick(View v)

对此进行排序后,代码应该编译。

答案 1 :(得分:0)

感谢EMakarovas的帮助和建议,它有效! 我重新设计了方法,使其几乎可以在任何进度条上运行!

以下是需要它的人的代码!

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