从片段中的父活动中调用AsyncTask [英] Call AsyncTask in the parent activity from fragment

查看:65
本文介绍了从片段中的父活动中调用AsyncTask的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个使用分页寻呼机的活动,我想知道如何从fragment调用位于该活动上的asynctask.
AddActivity.java

I have an activity with fragment pager and I want to know how to call an asynctask located on that activity from fragment .
AddActivity.java

public class AddActivity extends FragmentActivity {

    ViewPager vp;
    ProgressDialog dialog;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_add);

        vp = (ViewPager) findViewById(R.id.pager);
        PagerAdapter pa = new FragPagerAdapter(getSupportFragmentManager());
        vp.setAdapter(pa);

    }


    //This void to get All field from the differents fragments and put them into jsonObject
    protected JSONObject createJsonObjectVR () {
        ...
    }

    // Call the Post Method
    public class addVR extends AsyncTask<String, String, String> {
         ...
    }

OtherFragment.java

public class OtherFragment extends Fragment {
    Button btn;

    public OtherFragment() {
        // Required empty public constructor
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_other, container, false);
        btn = (Button) view.findViewById(R.id.send);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Here I want to call the createVR asynctask in the parent Activity
            }
        });
        return view;
    }
}

FragPagerAdapter

public class FragPagerAdapter extends FragmentPagerAdapter {

    public FragPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {

        switch (index) {
            case 0:
                // First Fragment The main
                return new FirstFragment();
            case 1:
                // Milk (Second) fragment activity
                return new SecondFragment();
            case 2:
                // Housing (Third) fragment activity
                return new HousingFragment();
            case 3:
                //Feeding (fourth) fragment activity
                return new FeedingFragment();
            case 4:
                // Other (Fith the last) fragment activity
                return new OtherFragment();
        }

        return null;
    }

    @Override
    public int getCount() {
        // get item count - equal to number of tabs
        return 5;
    }

}

推荐答案

在您的片段中:

((AddActivity) getActivity()).someMethodToCallAsyncTaskInAddActivity();

添加您的AddActivity:

inf your AddActivity:

public void someMethodToCallAsyncTaskInAddActivity() {

       new AsyncTask(someOptions_if_needed).execute();

}

另一个选项

public static  class ASyncronius extends AsyncTask<Void, Void, Void> 

如果将其设为静态,则可以从任何地方调用此异步任务

if you make it static you can call this async task from anywhere

AddActivity.ASyncronius  abs = new AddActivity.ASyncronius ();
abs.execute()

编辑2014-11-11

如果在不同的活动中使用片段,则应确保这些活动扩展了包含异步方法的同一主类.

if you use fragment in diffrent activitys, then you shuld make shure, that those activitys extends same master class, that contains async method.

class ParentActivity extends Activity {

someMethodToCallAsyncTaskInParentActivity(){
***new async execute***
} 

  public class async extends AsyncTask<void, void, void>{
  ***Some stuff***
 }
}

然后:

class FirstActivity extends ParentActivity{

}

class SecondActivity extends ParentActivity{

}

在您的片段中

((ParentActivity)getActivity()).someMethodToCallAsyncTaskInParentActivity();

或者如果您不需要在其他活动中使用异步任务,则只需执行以下操作即可:

or if you dont need in that other activity use async task, then just do some thing like this:

try{
 ((FirstActivity)getActivity()).someMethodToCallAsyncTaskInParentActivity();
} catch( Exception e) {
   // this is not needed activity
}

这篇关于从片段中的父活动中调用AsyncTask的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆