我必须在我的Android应用程序中等待几秒钟,我想在此期间显示进度条,我该怎么做?
例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
timeForShow(5 //second);
}
.
.
.
private void timeForShow(long mytime){
myprogress.setVisibility(View.VISIBLE);
Waiting for mytime...
myprogress.setVisibility(View.GONE);
}
这是我的代码,但不起作用:
Long timerforprogressbar ;
@Override
protected void onCreate(Bundle savedInstanceState) {
timerforprogressbar = (long) 5000 ;
new MyProgressBar().execute((Void)null);
}
.
.
.
class MyProgressBar extends AsyncTask<Void, Void, Void>{
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub
progressbar.setVisibility(View.VISIBLE);
try {
Thread.sleep(timerforprogressbar);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
progressbar.setVisibility(View.GONE);
}
}
我的进度条:
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyleLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
android:indeterminateDrawable="@drawable/progress" >
</ProgressBar>
进度条是我的进度条,PLZ帮我,tnx。
答案 0 :(得分:2)
对于您的特定用例,使用Handler会更简单:
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
progressbar.setVisibility(View.GONE);
}
}, timerforprogressbar);
你没有提到你的进度条是如何构建的,但如果你只是想要显示一个不确定的进度,那么以编程方式构造它将是我认为最简单的事情。
private ProgressDialog working_dialog;
private void showWorkingDialog() {
working_dialog = ProgressDialog.show(context, "","Working please wait...", true);
}
private void removeWorkingDialog() {
if (working_dialog != null) {
working_dialog.dismiss();
working_dialog = null;
}
}
这会使代码看起来像:
showWorkingDialog();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
removeWorkingDialog();
}
}, timerforprogressbar);
答案 1 :(得分:1)
//我们可以通过使用协程来实现。
//只需启动一个协程,并在几毫秒后更改调度程序上下文即可更改进度条的进度。
//在显示到下一个片段之前,我在这里显示了1秒钟的进度。
CoroutineScope(Dispatchers.IO).launch {
for (i in 0..100) {
delay(10)
withContext(Dispatchers.Main) {
binding.progressBar.progress = i
}
}
//Navigate to next fragment using nav contorller or with Intents for next Activity
navController.navigate(R.id.action_startFragment_to_listFragment)
}
答案 2 :(得分:0)
答案 3 :(得分:0)
作为比AsyncTask更简单的解决方案,您始终可以考虑使用CountDownTimer来执行此操作。
答案 4 :(得分:0)
如果您在AsyncTask doInBackground()中执行任务,那么您可以在onPreExecute()中启动progressBar并在onPostExecute()中禁用它。
答案 5 :(得分:0)
您始终可以使用CountDownTimer
:
public void timer() {
countDownTimer=new CountDownTimer(20000, 1000) { //display a delay of 20 seconds
public void onTick(long millisUntilFinished) {
if (somethingToBreakTheCount)
countDownTimer.onFinish();
txtDebug.setText("seconds remaining: " + millisUntilFinished / 1000);
}
public void onFinish() {
txtDebug.setText("Done!");
finish();
}
}.start();
}