Android 活动调用asynctask中带有片段的进程对话框

Android 活动调用asynctask中带有片段的进程对话框,android,android-asynctask,android-activity,fragment,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); th

我有一个主活动,里面有一个片段,它调用一个
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;
}
}
public类SomeFragment扩展了Fragment{
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
//为该碎片膨胀布局
视图=充气机。充气(R.layout.article_视图,容器,假);
ServiceHelper srv=新的ServiceHelper(getActivity(),“GetHomeImage”,后参数,2);
AsyncTask请求=srv.execute();
返回视图;
}
}
异步任务类-显示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();
}
}
公共类ServiceHelper扩展异步任务{
公共ServiceHelper(上下文c、字符串方法、HashMap参数、int-requestType){
上下文=c;
这个方法=方法;
此参数=参数;
this.requestType=requestType;
}
受保护的void onPreExecute(){
progressDialog=progressDialog.show(上下文,“Requisiço”,“Chamando Serviço”,true,false);
}
受保护的字符串doInBackground(字符串…参数){
做些事情。。。
}
受保护的void onPostExecute(字符串结果){
progressDialog.disclose();
}
}
我面临的问题是调用了片段,发出了请求,但是
Progessdialog
仅在显示片段时出现。 呼叫时是否可以显示
Progressdialog


谢谢。

我认为这里最简单的方法是在调用执行异步任务之前显示进度对话框。要关闭进度对话框,您应该向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();
final Dialog progressDialog=progressDialog.show(上下文,“Requisiço”,“Chamando Serviço”,true,false);
ServiceHelper srv=新的ServiceHelper(getActivity(),“GetHomeImage”,后参数,2);
setListener(新的ServiceHelperListener(){
公开作废{
progressDialog.disclose();
}
公共无效OnComplete(){
progressDialog.disclose();
}
});
AsyncTask请求=srv.execute();
以及ServiceHelper类和侦听器:

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();
}
公共类ServiceHelper扩展异步任务{
私人服务助手列表器;
公共ServiceHelper(上下文c、字符串方法、HashMap参数、int-requestType){
上下文=c;
这个方法=方法;
此参数=参数;
this.requestType=requestType;
}
公共void setListener(ServiceHelperListener侦听器){
this.mListener=侦听器;
}
受保护的void onPreExecute(){
}
受保护的字符串doInBackground(字符串…参数){
做些事情。。。
}
受保护的void onPostExecute(字符串结果){
if(mListener!=null){
mListener.onCompelte();
}
}
@凌驾
取消时受保护的空(字符串s){
super.onCancelled(s);
if(mListener!=null){
mListener.onCancel();
}
}
}
公共接口服务HelperListener{
公共无效取消();
公共无竞争权();
}

在片段的哪一部分创建
ServiceHelper
?片段的发布代码我正在调用服务onCreateView。我在上面添加了片段代码。progrees对话框仅在片段被重新调整时出现。因此,当对话框出现时,请求已经完成。谢谢,好主意,但progrees对话框仅在片段完成加载时显示。当对话框显示时,请求已完成。