gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 02:44:37 25 4
gpt4 key购买 nike

我有一组方法,每个方法都需要时间来完成它的任务。

例如,

方法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 的帮助下创建了这样的进度条.

最佳答案

对这种事情使用 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

关于android - 水平进度条不会增加以显示 DialogFragment 中的进度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25284200/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com