0

我是 Android 编程新手.. 我正在使用 Mono for android.. 我想制作一个进度对话框来显示我导入数据时的进度。我使用 Asynctask .. 任何人都可以帮助如何让我的进度对话框显示进度。或者任何关于其他可能的方法的建议。

public class importData : AsyncTask
{

private ProgressDialog _progressDialog;
WebReference.Service1 service = new WebReference.Service1();
private Context _context;




public importData(Context context)

{

_context = context;



}

protected override void OnPreExecute()

{
// i make a horizontal progressdialog, i want to see the progress while importing

base.OnPreExecute();
_progressDialog = new ProgressDialog(_context) { Indeterminate = false };
_progressDialog.SetMessage("Please wait...");
 _progressDialog.SetProgressStyle(ProgressDialogStyle.Horizontal);
_progressDialog.Max = 806;
_progressDialog.Progress = 0;
_progressDialog.Show();

}

protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)

{
try
{
//My background Code in Importing Data
return true;
}
catch (Exception ex)
{
//When has an error return false
return false;
}


}

protected void OnProgressUpdate()
{
base.OnProgressUpdate();
//What i'm going to put in this part

}

protected override void OnPostExecute(Java.Lang.Object result)

{
base.OnPostExecute(result);
_progressDialog.Hide();
_progressDialog.Dismiss();
bool dd = (bool)result;
if (dd)
{


//Toast.MakeText(this, "Importing data completed", ToastLength.Short).Show();
Android.App.AlertDialog.Builder builder = new AlertDialog.Builder(_context);
AlertDialog ad = builder.Create();
ad.SetTitle("Info");
ad.SetIcon(Android.Resource.Drawable.IcDialogInfo);
ad.SetMessage("Importing deals completed");
ad.SetButton("OK", (s, e) => { });
ad.Show();
}
else {

Android.App.AlertDialog.Builder builder = new AlertDialog.Builder(_context);
AlertDialog ad = builder.Create();
ad.SetTitle("Error");
ad.SetIcon(Android.Resource.Drawable.IcDialogAlert);
ad.SetMessage("Failed");
ad.SetButton("OK", (s, e) => { });
ad.Show();
}
}


}
4

1 回答 1

0

我在下面修改了你的代码。希望能帮助到你。或者给你一个想法。在 DoinBackground 循环您的进度对话框并使用 this.publishProgress 将其传递给 onprogressupdate ..

public class importData : AsyncTask
{

private ProgressDialog _progressDialog;
WebReference.Service1 service = new WebReference.Service1();
private Context _context;




public importData(Context context)

{

_context = context;



}

protected override void OnPreExecute()

{
// i make a horizontal progressdialog, i want to see the progress while importing

base.OnPreExecute();
_progressDialog = new ProgressDialog(_context) { Indeterminate = false };
_progressDialog.SetMessage("Please wait...");
 _progressDialog.SetProgressStyle(ProgressDialogStyle.Horizontal);
_progressDialog.Max = 806;
_progressDialog.Progress = 0;
_progressDialog.Show();

}

protected override Java.Lang.Object DoInBackground(params Java.Lang.Object[] @params)

{

try
{
for(int i=0; i<_progressDialog.Max; i++) {
    this.PublishProgress(i);
}
//My background Code in Importing Data
return true;
}
catch (Exception ex)
{
//When has an error return false
return false;
}


}



protected override void OnProgressUpdate(params Java.Lang.Object[] values)
{
base.OnProgressUpdate();
//increment the progress of your progrssdialog
_progressDialog.IncrementProgressBy(1);

}

protected override void OnPostExecute(Java.Lang.Object result)

{
base.OnPostExecute(result);
_progressDialog.Hide();
_progressDialog.Dismiss();
bool dd = (bool)result;
if (dd)
{


//Toast.MakeText(this, "Importing data completed", ToastLength.Short).Show();
Android.App.AlertDialog.Builder builder = new AlertDialog.Builder(_context);
AlertDialog ad = builder.Create();
ad.SetTitle("Info");
ad.SetIcon(Android.Resource.Drawable.IcDialogInfo);
ad.SetMessage("Importing deals completed");
ad.SetButton("OK", (s, e) => { });
ad.Show();
}
else {

Android.App.AlertDialog.Builder builder = new AlertDialog.Builder(_context);
AlertDialog ad = builder.Create();
ad.SetTitle("Error");
ad.SetIcon(Android.Resource.Drawable.IcDialogAlert);
ad.SetMessage("Failed");
ad.SetButton("OK", (s, e) => { });
ad.Show();
}
}


}
于 2013-03-09T02:18:27.020 回答