方法的Android进度条

时间:2014-09-16 23:39:32

标签: android methods android-progressbar

我有一个我的课程的自定义方法(在我的Android手机上)需要2-3秒才能完成,我想用进度条包围它。

这是我的方法:

public void getQuestionsForSelectedCategory(){
    ArrayList<Question> temp = (ArrayList<Question>) this.clone();
    ArrayList<Question> tempGroup;
    this.clear();
    for(int i=0;i<2;i++){
        tempGroup = new ArrayList<Question>();
        for(int j=0;j<temp.size();j++)
            if((temp.get(j).getGroup()==i+1)&&(temp.get(j).getCategory().contains(category)||temp.get(j).getCategory().equals("*")))
                tempGroup.add(temp.get(j));
        getQuestionsForSelectedGroup(tempGroup, numbersByGroup[i], pointsByGroup[i]);
    }

    tempGroup = new ArrayList<Question>();
    for(int i=0;i<temp.size();i++){
        int a = temp.get(i).getGroup();
        if((a==3||a==4||a==5||a==6||a==7))
            if(temp.get(i).getCategory().contains(category)||temp.get(i).getCategory().equals("*"))
                tempGroup.add(temp.get(i));
    }
    Collections.shuffle(tempGroup);
    getQuestionsForSelectedGroup(tempGroup, numbersByGroup[2], pointsByGroup[2]);

    if(category.equals("C")){
        tempGroup = new ArrayList<Question>();
        for(int i=0;i<temp.size();i++)
            if(temp.get(i).getCategory().equals(category))
                tempGroup.add(temp.get(i));
        getQuestionsForSelectedGroup(tempGroup, 10, 30);
    }
}

以下是我尝试做的事情:

barProgressDialog = new ProgressDialog(this);
    barProgressDialog.setTitle("Preparing Test");
    barProgressDialog.setMessage("Preparing Test");
    barProgressDialog.setProgressStyle(barProgressDialog.STYLE_HORIZONTAL);
    barProgressDialog.setProgress(0);
    barProgressDialog.setMax(100);
    barProgressDialog.show();

    new Thread(new Runnable() {
        @Override
        public void run() {
            try {
                getQuestionsForSelectedCategory();
                while (barProgressDialog.getProgress() <= barProgressDialog.getMax()) {
                    updateBarHandler.post(new Runnable() {
                        public void run() {
                            barProgressDialog.incrementProgressBy(2);
                          }
                      });
                    if (barProgressDialog.getProgress() == barProgressDialog.getMax()) {
                        barProgressDialog.dismiss();
                    }
                }
            } catch (Exception e) {
            }
        }
    }).start();
}

对于当前代码,进度条最多可填充100但不执行任何操作。

1 个答案:

答案 0 :(得分:0)

您可以使用AsyncTask实现此目的,同时在任务期间发布您的进度。

AsyncTask<Void, Integer, Void> task = new AsyncTask<Void, Integer, Void>() {

    @Override
    protected Void doInBackground(Void... voids) {
        getQuestionsForSelectedCategory();
        return null;
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        barProgressDialog.setProgress(values[0]);
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        barProgressDialog.dismiss();
    }
}

task.execute();

确保您的getQuestionsForSelectedCategorygetQuestionsForSelectedGroup方法位于AsyncTask内,并且您可以在循环内调用publishProgress(int progress)来更新进度对话框。