Я использую ViewPager с 3 или более фрагментами, отображающими и сохраняющими CustomView в качестве поля.
В процессе хостинга FragmentActivity мне нужно получить доступ и задать атрибуты и поля CustomView, чтобы изменить способ их отображения.
Проблема возникает, когда мне нужно получить доступ к еще не созданному фрагменту, как к третьему фрагменту в начале действия (первый фрагмент выбран по умолчанию, и создается только следующий фрагмент).
Моя Активность:
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;
}
}
}