2014-11-06 33 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