2014-11-06 47 views
2

我有一个片段分页器的活动,我想知道如何从片段调用位于该活动的asynctask。
AddActivity.java在片段的父活动中调用AsyncTask

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; 
    } 

} 
+0

从哪里你叫otherfragment? – 2014-11-06 12:21:35

+0

new addVR()。execute(params); – 2014-11-06 12:23:44

+0

@Chelbta只是通过你在这个片段中的主要活动的参考,然后称之为 – 2014-11-06 12:27:52

回答

10

在您的片段:

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

INF您AddActivity:

public void someMethodToCallAsyncTaskInAddActivity() { 

     new AsyncTask(someOptions_if_needed).execute(); 

} 

还有一个选项

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

如果你把它的静态你可以从任何地方

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

调用这个异步任务编辑2014-11-11

如果您在不同的活动中使用片段,那么您就可以使这些活动扩展到包含异步方法的相同主类。

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(); 

,或者如果你不需要在其他活动中使用异步任务,然后就去做有些事情是这样的:

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

该解决方案是正确的 – 2014-11-06 12:33:39

+0

是的,它工作的感谢的,但有没有其他的方法? – Chlebta 2014-11-06 13:12:59

+1

我有其他解决方案,但我不知道它是否工作 – Alpha 2014-11-06 13:17:50