简体   繁体   English

发送网络请求,因为FragmentPagerAdapter显示了Fragment

[英]Send network request as FragmentPagerAdapter shows the Fragment

I am using the FragmentPagerAdapter which shows three fragments by using ViewPager. 我正在使用FragmentPagerAdapter,它通过使用ViewPager显示三个片段。 I have setOffscreenPageLimit to 3 so all the three fragments send the network request simultaneously as they are visible(I have send the network request on Fragment.onActivityCreated()). 我将OffOffPagePageLimit设置为3,因此所有三个片段在可见时同时发送网络请求(我已经在Fragment.onActivityCreated()上发送了网络请求)。 But I want network request is send only when Fragment is visible(means user is scrolled to that fragment). 但我希望仅在可见片段时发送网络请求(意味着用户滚动到该片段)。

Note: I am using the setOffscreenPageLimit to 3 because every time the fragment is created no new network request is created and show the catches fragment 注意:我将setOffscreenPageLimit设置为3,因为每次创建该片段时,都不会创建新的网络请求并显示捕获片段

Making network requests in oncreateview () of every fragment should do what you want to. 在每个片段的oncreateview()中发出网络请求应该做您想要的。 example :Something that ive been using . 例子:我一直在使用的东西。 Parent activity with fragment pager adapter. 带有片段寻呼机适配器的父活动。

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;
            }
        }

Pass specify the fragments in the adapter. 通过指定适配器中的片段。 make network requests in onCreateView() of every fragment. 在每个片段的onCreateView()中发出网络请求。 that way network requests will be only made when fragment is visible. 这样,只有在可见片段时才发出网络请求。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM