I use a ViewPager with 3 or more fragments displaying and saving a CustomView as a field.
In the process of hosting FragmentActivity, I need to access and set the attributes and fields of CustomView to change the way I display.
The problem arises when I need to access a fragment that has not yet been created, like the third fragment at the beginning of the action (the first fragment is selected by default and only the next fragment is created).
My Acticity:
public class VectorProduct extends FragmentActivity { ViewPager mViewPager; TabsAdapter mTabsAdapter; @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; } } }
source share