>## open command prompt with Run as Administrtor ##
adb connect ipdevice:5037
Использование ViewPager.OnPageChangeListener
- правильный путь, но вам нужно будет немного реорганизовать ваш адаптер, чтобы сохранить ссылку на каждый фрагмент, содержащийся в FragmentPagerAdapter.
Вы используете это, используя [#]
class PagerAdapter extends FragmentPagerAdapter {
String tabTitles[] = new String[] { "One", "Two", "Three", "Four"};
Context context;
//This will contain your Fragment references:
public Fragment[] fragments = new Fragment[tabTitles.length];
public PagerAdapter(FragmentManager fm, Context context) {
super(fm);
this.context = context;
}
@Override
public int getCount() {
return tabTitles.length;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new FragmentOne();
case 1:
return new FragmentTwo();
case 2:
return new FragmentThree();
case 3:
return new FragmentFour();
}
return null;
}
//This populates your Fragment reference array:
@Override
public Object instantiateItem(ViewGroup container, int position) {
Fragment createdFragment = (Fragment) super.instantiateItem(container, position);
fragments[position] = createdFragment;
return createdFragment;
}
@Override
public CharSequence getPageTitle(int position) {
// Generate title based on item position
return tabTitles[position];
}
}
Затем вместо создания нового фрагмента используйте тот, который содержится в адаптере:
mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }
@Override
public void onPageSelected(int position) {
// do this instead, assuming your adapter reference
// is named mAdapter:
Fragment frag = mAdapter.fragments[position];
if (frag != null && frag instanceof FragmentTwo) {
((FragmentTwo)frag).sendGetRequest();
}
}
@Override
public void onPageScrollStateChanged(int state) { }
});
Обратите внимание: если вы используете разные классы фрагментов в своем адаптере, вы можете реализовать интерфейс, который определяет sendGetRequest()
, а в каждом из ваших классов фрагментов реализует метод sendGetRequest ().
Если вы не идете с интерфейсом, вам нужно будет отбросить фрагмент к вашему собственному типу фрагмента, как показано в примере выше, то есть:
if (frag instanceof FragmentTwo) {
((FragmentTwo)frag).sendGetRequest();
}
Вместо вызова метода sendGetRequest () в прослушивателе просмотра пейджера, вызовите свой запрос GET в методе onCreateView в вашем фрагменте фрагмента class_two. Причина этого заключается в том, что вы гарантируете, что все ваши представления в фрагментаторе были правильно инициализированы через события жизненного цикла фрагмента.