如何解决使用AsyncTask在android中的标签之间导航时,进度对话框无法正确显示
|| 我在应用程序中打开了2个标签。每当我单击第二个选项卡时,我需要从服务器获取数据以使用AsyncTask,一切正常,但是问题出现在进度对话框中,即当我单击第二个选项卡时,我需要显示进度对话框在第一个选项卡中(由于第二个选项卡正在从服务器调用中获取数据),但是进度对话框显示在第二个选项卡中,直到服务器调用完成后,该对话框对我才可见。 有人可以帮我这个忙吗,谢谢。 AsyncTask代码 package com.cmc.bizgateway.net;
import java.util.List;
import org.apache.http.message.BasicNameValuePair;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;
public class ProgressBarManager extends
AsyncTask<List<BasicNameValuePair>,String,String> {
List list1 = null;
Context context;
private ProgressDialog dialog = null;
public ProgressBarManager() {
super();
}
public ProgressBarManager(Context context) {
super();
}
public void setProgressDialog(Context c) {
dialog = new ProgressDialog(c);
this.context = c;
}
private NetworkManager networkManager = new NetworkManager();
@Override
protected String doInBackground(List... arg0) {
// Log.v(\"in dobackground\",\"result\");
String response = null;
try{
response = networkManager.postWebService(arg0[0]);
}catch(Exception e) {
Log.v(\"\",\"exception in background \" + e);
Toast.makeText(context.getApplicationContext(),\" resId\",4000).show();
}
return response;
}
protected void onPreExecute() {
// Log.v(\"in pre execute\",\"result\");
this.dialog.setMessage(\"Loading. Please wait...\");
this.dialog.show();
}
/**
* method is called after the work is done.
*
* @param success
* result of #doInBackground method.
*/
// @Override
protected void onPostExecute(String success) {
// Log.v(\"in post execute\",\"result\");
if (dialog.isShowing()) {
dialog.dismiss();
}
}
}
在tabhost类中,我正在编写代码
secondTabSpec.setIndicator(\"Categories\").setContent(
new Intent(this,ProductCategoriesActivity.class));
并在ProductCategoriesActivity类中
我正在使用的oncreate方法
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
context = this;
ProgressBarManager p = new ProgressBarManager();
p.setProgressDialog(context);
List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(
3);
nameValuePairs.add(new BasicNameValuePair(\"method\",\"\\\"\"
+ \"getCategoryList\" + \"\\\"\"));
nameValuePairs.add(new BasicNameValuePair(\"type\",\"\\\"\" + \"product\"
+ \"\\\"\"));
String result;
try {
result = p.execute(nameValuePairs).get();
}
解决方法
ProgressDialog dialog;
dialog = new ProgressDialog(activity);
dialog.setIndeterminate(true);
dialog.setCancelable(false);
dialog.setMessage(\"Please Wait\");
public class background extends AsyncTask<String,Void,Void>
{
@Override
protected void onPreExecute() {
// Log.v(\"in pre execute\",\"result\");
this.dialog.show();
}
protected Void doInBackground(String... params) {
// TODO Auto-generated method stub
return null;
}
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
if(dialog!=null)
{
dialog.dismiss();
}
}
}
你可以试试看,请不要使用AsyncTask来显示进度条。
你应该做的是
创建一个用于执行服务器操作的新线程,并在该线程开始之前创建&
显示进度条,这是执行此操作的示例代码
final ProgressDialog dialog = ProgressDialog.show (this,getResources().getText(R.string.progressbartitle),getResources().getText(R.string.progressbartext),true,false);
new Thread()
{
public void run()
{
//do you web server call
}
}.start();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。