我正在尝试显示一个ProgressBar。
我是Android初学者。
当我按下按钮时,任务应该在后台运行,但是它不会显示ProgressBar。
怎么了 我不明白。
请帮我!
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(); } }
您没有调用dialog.show()的onPreExecute方法AsyncTask。
dialog.show()
onPreExecute
AsyncTask