3 回答
TA贡献1794条经验 获得超8个赞
使用the ViewPager.OnPageChangeListener是正确的方法,但是你需要稍微重构一下你的适配器,以便保留对FragmentPagerAdapter中包含的每个Fragment的引用。
你使用instantiateItem()适配器中的方法覆盖来做到这一点,这是一个简化的例子:
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) { }});请注意,如果在适配器中使用不同的Fragment类,则可以实现定义的接口sendGetRequest(),并在每个Fragment类中实现sendGetRequest()方法。
如果不使用接口方法,则需要将Fragment转换为您自己的Fragment类型,如上例所示,即:
if (frag instanceof FragmentTwo) {
((FragmentTwo)frag).sendGetRequest();}TA贡献1780条经验 获得超5个赞
不是在视图寻呼机侦听器中调用sendGetRequest()方法,而是在fragment_two片段类的onCreateView方法中调用GET请求。这样做的原因是您确保fragment_two中的所有视图都已通过片段的生命周期事件正确初始化。
TA贡献1900条经验 获得超5个赞
正如我在第一种方法中提到的,当我在onCreateView或setUserVisibleHint中使用sendGetRequest()时,每件事都运行良好,在这种情况下的问题是转换不够顺利。这种缺乏平滑性可能是因为在请求开始时显示了ProgressDialog,但它应该显示
添加回答
举报
