Here is what I'm trying to do
I have an inner class which extends a FragmentPagerAdapter
, but I don't want to do a network call for each Fragment
. So I'm trying to do just one call and send the result I get from it to each Fragment
to be dealt by each one of them according to their needs.
But here lies my problem
It seems that for some reason the fragments are loaded before the network call returns a successful result and I was wondering how do I avoid that to happen?
Thanks so really very much for any possible help on that!!
public class WelcomeActivity extends FragmentActivity {
private List<Reward> mTutorialList = new ArrayList<>();
private String myResult = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_welcome);
ViewPager pager = (ViewPager) findViewById(R.id.viewPager);
pager.setAdapter(new MyPagerAdapter(getSupportFragmentManager()));
}
private class MyPagerAdapter extends FragmentPagerAdapter {
public MyPagerAdapter(FragmentManager fm) {
super(fm);
}
private void getData() {
JsonObject jo = new JsonObject();
String user_id = LocalSave.getUserId();
jo.addProperty("user_id", user_id);
jo.addProperty("tag", "all");
jo.addProperty("limit", "-1");
RewardsAPI.postData(jo, new RewardsAPI.ThisCallback() {
@Override
public void onSuccess(Rewards rewards) {
Log.d(App.TAG, "onSuccess");
myResult = rewards.getRewards().get(0).getRedeemUrl();
mTutorialList = rewards.getRewards();
}
@Override
public void onFailure() {
Log.e(App.TAG, "onFailure");
}
@Override
public void onError(APIError error) {
Log.e(App.TAG, "Exception: " + error.getErrorMessage());
}
});
}
@Override
public Fragment getItem(int pos) {
getData();
switch (pos) {
case 0:
// return WelcomeFragment.newInstance(mTutorialList.get(0));
return GetStartedFragment.newInstance("Get Started!");
case 1:
return FitnessPlanFragment.newInstance("fitness plan");
case 2:
return NutritionPlanFragment.newInstance("nutrition plan");
default:
return GetStartedFragment.newInstance("Get Started!");
}
}
@Override
public int getCount() {
return 3;
}
}
}