I'm using a ViewPager with 3 or more Fragments displaying and storing a CustomView as a field.
During the process of the hosting FragmentActivity I need to access and set attributes and fields of the CustomView in order to alter the way they are displayed.
The problem occurs when I need to access not yet instantiated Fragment like the third Fragment in the beginning of the Activity (the first Fragment is default selected and only the next Fragment is instantiated).
My Acticity:
public class VectorProduct extends FragmentActivity {
ViewPager mViewPager;
TabsAdapter mTabsAdapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.pager);
final ActionBar bar = getSupportActionBar();
bar.setSubtitle(R.string.bt_dashboard_vector_product);
bar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
mTabsAdapter = new TabsAdapter(this, bar, mViewPager);
mTabsAdapter.addTab(bar.newTab().setText("Vector 1"), VectorFragment.class);
mTabsAdapter.addTab(bar.newTab().setText("Vector 2"), VectorFragment.class);
mTabsAdapter.addTab(bar.newTab().setText("Vector 3"), VectorFragment.class);
}
public static class TabsAdapter extends FragmentPagerAdapter implements
ViewPager.OnPageChangeListener, ActionBar.TabListener {
private final FragmentManager mFragmentManager;
private final Context mContext;
private final ActionBar mActionBar;
private final ViewPager mViewPager;
private ArrayList<Class<? extends Fragment>> Fragments;
public TabsAdapter(FragmentActivity activity, ActionBar actionBar,
ViewPager pager) {
super(activity.getSupportFragmentManager());
mFragmentManager = activity.getSupportFragmentManager();
mContext = activity;
mActionBar = actionBar;
mViewPager = pager;
mViewPager.setAdapter(this);
mViewPager.setOnPageChangeListener(this);
setFragments(new ArrayList<Class<? extends Fragment>>());
}
public void addTab(ActionBar.Tab tab, Class<? extends Fragment> clss) {
mActionBar.addTab(tab.setTabListener(this));
getFragments().add(clss);
notifyDataSetChanged();
}
@Override
public Fragment getItem(int position) {
try {
return Fragments.get(position).newInstance();
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
}
return null;
}
public Fragment findFragment(int position) {
String name = "android:switcher:" + mViewPager.getId() + ":" + position;
Fragment fragment = mFragmentManager.findFragmentByTag(name);
if (fragment == null) {
fragment = getItem(position);
}
return fragment;
}
}
}