从片段中的父活动中调用AsyncTask [英] Call AsyncTask in the parent activity from fragment
问题描述
我有一个使用分页寻呼机的活动,我想知道如何从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屋!