FragmentPagerAdapter显示片段时发送网络请求

时间:2013-11-18 05:34:29

标签: android

我正在使用FragmentPagerAdapter,它使用ViewPager显示三个片段。我将setOffscreenPageLimit设置为3,因此所有三个片段在可见时同时发送网络请求(我已经在Fragment.onActivityCreated()上发送了网络请求)。但我希望只有当Fragment可见时才发送网络请求(意味着用户滚动到该片段)。

注意:我使用setOffscreenPageLimit为3,因为每次创建片段时都不会创建新的网络请求并显示捕获片段

1 个答案:

答案 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()中发出网络请求。这样,网络请求将仅在片段可见时进行。