水平进度条不会增加以显示DialogFragment中的进度

时间:2014-08-13 10:50:00

标签: android android-dialogfragment android-progressbar

我有一套方法,每种方法都需要时间来完成任务。

例如,

执行方法setRules()后,

  • 进度级别应增加到30

执行方法getLogs()后,

  • 进度级别应增加到60

执行方法getChartView()后,

  • 进度级别应增加到100

但是ProgressBar增加到30并且没有超出该范围,尽管我的所有方法都在执行。

代码 -

public class DialogPopup extends DialogFragment 
{

    private static int myProgress=0;
    private ProgressBar progressBar;
    private int progressStatus=0;
    private Handler myHandler=new Handler();

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) 
    {
        super.onCreateView(inflater, container, savedInstanceState);

        view = inflater.inflate(R.layout.main,container, false);

        progressBar = (ProgressBar) view.findViewById(R.id.progressBar1);

        beginYourTask();

        return view;
    }

    public void beginYourTask()
    {
        myProgress=0;
        progressBar=(ProgressBar)view.findViewById(R.id.myProgress);
        progressBar.setMax(100);

        //progressBar.setVisibility(View.VISIBLE);

        /*Do some work in background thread*/ 
        new Thread(new Runnable() 
        {

          @Override
          public void run() 
          {             
            progressStatus=setRules();  
            myHandler.post(new Runnable()
            {
                public void run() 
                {
                    progressBar.setProgress(progressStatus);
                }
            });

            progressStatus=getLogs();   
            myHandler.post(new Runnable()
            {
                public void run() 
                {
                    progressBar.setProgress(progressStatus);
                }
            });

            progressStatus=getChartView();  
            myHandler.post(new Runnable()
            {
                public void run() 
                {
                    progressBar.setProgress(progressStatus);
                }
            }); 

            /*Hides the Progress bar*/
            myHandler.post(new Runnable() 
            {
                @Override
                public void run() 
                {
                    progressBar.setVisibility(View.GONE);
                    progressStatus=0; 
                    myProgress=0;
                }
            });

        }

        private int setRules()
        {
            //Code here takes time

            //set progress to 30
            return 30;
        }

        private int getLogs()
        {
            //Code here takes time

            //set progress to 60    

            return 60;
        }

        private int getChartView()
        {
            //Code here takes time

            //set progress to 100
            return 100; 
        }
    }).start();
 }

注意:

我从教程中android-progress-bar-horizontal获取了帮助来创建此类进度条。

1 个答案:

答案 0 :(得分:1)

使用AsyncTask进行此类操作:

public void beginYourTask()
{
    new AsyncTask<Void, Integer, Void>(){

   @Override
   public Void doInBackground(Void...params){
       publishProgress(setRules());
       publishProgress(getLogs());
       publishProgress(getChartView());
       return null;
   } 

     @Override
     public void onProgressUpdate(Integer... progress) {
        progressBar.setProgress(progress[0]);
    }

    @Override
    public void onPostExecute(Void result){
        progressBar.setVisibility(View.GONE);
    }

   }.execute();
}

这个想法,可能存在错别字。

您的链接中的教程尚未更新一段时间,通常您不希望在这种情况下使用Thread,因为AsyncTask旨在帮助您免除使用Thread

时遇到的所有线程问题

在此阅读documentation,您就知道何时使用ThreadAsyncTask