我正在使用FragmentPagerAdapter,它使用ViewPager显示三个片段。我将setOffscreenPageLimit设置为3,因此所有三个片段在可见时同时发送网络请求(我已经在Fragment.onActivityCreated()上发送了网络请求)。但我希望只有当Fragment可见时才发送网络请求(意味着用户滚动到该片段)。
注意:我使用setOffscreenPageLimit为3,因为每次创建片段时都不会创建新的网络请求并显示捕获片段
答案 0 :(得分:0)
在每个片段的oncreateview()中发出网络请求应该按照您的意愿进行。 例如:我一直在使用的东西。 使用片段寻呼机适配器的父活动。
public class HomeActivity extends SherlockFragmentActivity{
private static final String[] CONTENT = new String[] { "Fragment 1", "Fragment 2" };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.homexml);
Bundle extra = getIntent().getExtras();
int i = Integer.parseInt(extra.getString("id"));
FragmentPagerAdapter adapter = new FragmentAdapter(getSupportFragmentManager());
ViewPager pager = (ViewPager)findViewById(R.id.pager);
pager.setAdapter(adapter);
TitlePageIndicator indicator = (TitlePageIndicator) findViewById(R.id.indicator);
indicator.setViewPager(pager);
switch (i)
{
case 2:
pager.setCurrentItem(0);
break;
case 3:
pager.setCurrentItem(1);
// break;
// case 4:
// pager.setCurrentItem(3);
// break;
// case 5:
// pager.setCurrentItem(4);
// break;
// case 6:
// pager.setCurrentItem(5);
// break;
// case 7:
// pager.setCurrentItem(6);
// break;
// default:
// pager.setCurrentItem(0);
// break;
}
indicator.setFooterIndicatorStyle(IndicatorStyle.Underline);
indicator.setFooterColor(Color.parseColor("#e7c450"));
}
class FragmentAdapter extends FragmentPagerAdapter {
SherlockFragment frg;
public FragmentAdapter(FragmentManager fm) {
super(fm);
}
@Override
public SherlockFragment getItem(int position) {
switch (position)
{
case 0:
frg = new fragment1();
break;
case 1:
frg = new fragment2();
break;
}
return frg;
}
@Override
public CharSequence getPageTitle(int position) {
return CONTENT[position];
}
// @Override public int getIconResId(int index) {
// return ICONS[index];
// }
@Override
public int getCount() {
return CONTENT.length;
}
}
传递指定适配器中的片段。在每个片段的onCreateView()中发出网络请求。这样,网络请求将仅在片段可见时进行。