进度对话框内部活动调用asynctask

时间:2014-04-05 19:16:08

标签: android android-asynctask android-activity fragment

我有一个主要活动,里面有一个片段,调用Asynctask

主要活动 - 主要活动有ViewPager加载片段。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

    this.viewPager = (ViewPager)findViewById(R.id.pager);
    this.mAdapter = new TabsPagerAdapter(getSupportFragmentManager());
    viewPager.setAdapter(mAdapter);

    /**
     * on swiping the viewpager make respective tab selected
     * */
    viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {

        @Override
        public void onPageSelected(int position) {
            // on changing the page
            // make respected tab selected
            //actionBar.setSelectedNavigationItem(position);
            //Toast.makeText(getApplicationContext(), "this is my Toast message!!! =)",
                       //Toast.LENGTH_LONG).show();
        }

        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {
        }

        @Override
        public void onPageScrollStateChanged(int arg0) {
        }
    });

片段 - 致电服务

public class SomeFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
    Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    view = inflater.inflate(R.layout.article_view, container, false);
ServiceHelper srv = new ServiceHelper(getActivity(), "GetHomeImage", postParameters, 2);
    AsyncTask<String, Void, String> request = srv.execute();
return view;
}
}

异步任务类 - 显示Progressdialog并发出请求

public class ServiceHelper extends AsyncTask<String, Void, String> {

public ServiceHelper(Context c, String method, HashMap<String, Object> parameters, int requestType){
     context = c;
     this.method = method;
     this.parameters = parameters;
     this.requestType = requestType;
 }

protected void onPreExecute(){   
progressDialog = ProgressDialog.show(context, "Requisição", "Chamando Serviço", true, false);
}

protected String doInBackground(String... params) {
do stuff...
}
protected void onPostExecute(String result) {
progressDialog.dismiss();
}
}

我面临的问题是调用片段,发出请求,但Progessdialog仅在显示片段时出现。 可以在拨打电话时显示Progressdialog吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我认为这里的简单方法是在调用执行AsyncTask之前显示进度对话框。要关闭进度对话框,您应该向ServiceHelper添加一个监听器并监听它以取消取消或完成任务时的对话框。这是代码:

final Dialog progressDialog = ProgressDialog.show(context, "Requisição", "Chamando Serviço", true, false);
ServiceHelper srv = new ServiceHelper(getActivity(), "GetHomeImage", postParameters, 2);
srv.setListener(new ServiceHelperListener() {
    public void onCancel() {
        progressDialog.dismiss();
    }

    public void onCompelte() {
        progressDialog.dismiss();
    }
});
AsyncTask<String, Void, String> request = srv.execute();

和ServiceHelper类和Listener:

public class ServiceHelper extends AsyncTask<String, Void, String> {

private ServiceHelperListener mListener;

public ServiceHelper(Context c, String method, HashMap<String, Object> parameters, int requestType){
    context = c;
    this.method = method;
    this.parameters = parameters;
    this.requestType = requestType;
}

public void setListener(ServiceHelperListener listener) {
    this.mListener = listener;
}

protected void onPreExecute(){
}

protected String doInBackground(String... params) {
    do stuff...
}

protected void onPostExecute(String result) {
    if (mListener != null) {
        mListener.onCompelte();
    }
}

@Override
protected void onCancelled(String s) {
    super.onCancelled(s);
    if (mListener != null) {
        mListener.onCancel();
    }
}
}

public interface ServiceHelperListener {
    public void onCancel();
    public void onCompelte();
}