gpt4 book ai didi

java - 使用 Asynctask 在 Android 中显示 ProgressBar

转载 作者:行者123 更新时间:2023-11-29 09:43:47 24 4
gpt4 key购买 nike

我正在尝试显示 ProgressBar。

我是 Android 初学者。

当我按下按钮时,任务应该在后台运行,但它不显示 ProgressBar。

有什么问题?看不懂。

请帮帮我!

主要 Activity :

package com.example.shikkok_services;

import java.util.ArrayList;

import android.app.Activity;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {


private Button btnThread,btntask;
private ProgressDialog pd;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnThread=(Button)findViewById(R.id.btnStartThread);
btntask=(Button)findViewById(R.id.btntsk);

btntask.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {


//start myTast

new MyTask(MainActivity.this).execute();


}
});



}

}

我的任务:

 package com.example.shikkok_services;

import android.app.Dialog;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Handler;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

public class MyTask extends AsyncTask<Void, Integer, Void> {

Context context;
Handler handler;
Dialog dialog;
TextView txtprogrss;
ProgressBar progress;
Button btnCancel;

MyTask(Context context, Handler handler){
this.context=context;
this.handler=handler;

}

MyTask(Context context){
this.context=context;
this.handler=handler;
}

@Override
protected void onPreExecute() {

super.onPreExecute();
// create dialog
dialog=new Dialog(context);
dialog.setCancelable(true);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.pogressdialog);
txtprogrss=(TextView) dialog.findViewById(R.id.txtProgress);
progress=(ProgressBar)dialog.findViewById(R.id.progressBar2);
btnCancel=(Button)dialog.findViewById(R.id.btnProgress);

btnCancel.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub

MyTask.this.cancel(true);
}
});


}


@Override
protected Void doInBackground(Void... arg0) {


for (int i = 0; i < 100; i++) {
if(isCancelled()){
break;
}else{
Log.e("In Background","current value;"+ i);
publishProgress(i);

try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}

}

return null;
}

@Override
protected void onProgressUpdate(Integer... values) {


super.onProgressUpdate(values);


progress.setProgress(values[0]);
txtprogrss.setText("progress update"+ values[0]+"%");

}

@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);


dialog.dismiss();
Toast.makeText(context, "Finished", Toast.LENGTH_LONG).show();

}





}

最佳答案

您忘记在 onPreExecute() 调用 dialog.show()

关于java - 使用 Asynctask 在 Android 中显示 ProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22988284/

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