3 回答

TA贡献1794条经验 获得超7个赞
使用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,但它应该显示
添加回答
举报