在显示片段之前不调用

Not calling before fragment is shown

我在 viewpager 中显示片段,每个片段都包含数据连接。 在显示所选片段之前,我不想做某事。 我该怎么办?

我的意思是,我不想在activity调用oncreate的时候启动片段。(因为有数据连接,我不想) 我只想在选择片段时启动每个片段。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    viewPager = (ViewPager) findViewById(R.id.view_pager);
    List<Fragment> listFragments = new ArrayList<>();
    listFragments.add(new Fg_1());
    listFragments.add(new Fg_2());
    listFragments.add(new Fg_3());
    listFragments.add(new Fg_4());
    listFragments.add(new Fg_5());
    listFragments.add(new Fg_6());
    a_pagerAdapter = new A_PagerAdapter(getSupportFragmentManager(), listFragments);
    viewPager.setAdapter(a_pagerAdapter);
    viewPager.addOnPageChangeListener(this);
}

不要在 activity onCreate 中创建所有片段,而是让 viewPager 在请求时创建它们,举个简单的例子:

在您的 A_PagerAdapter 实现中,将 getCount() 和 getItem(int) 重写为:

public class A_PagerAdapter extends FragmentPagerAdapter {
...
  private final static int NUM_PAGES = 6;
  private final Fragment[] listFragment = new Fragment[NUM_PAGES];
...
  public int getCount() {
    return NUM_PAGES;
  }
...
  public Fragment getItem(int index) {
   Fragment itemFragment = null;
   if (listFragment[index] == null) {
    // Hard-coded class factory.. yuck.
    switch(index) {
      case 0:
       itemFragment = new Fg_1();
       break;
      case 1:
       itemFragment = new Fg_2();
       break;
      case 2:
       itemFragment = new Fg_3();
       break;
      case 3:
       itemFragment = new Fg_4();
       break;
      case 4:
       itemFragment = new Fg_5();
       break;
      case 5:
       itemFragment = new Fg_6();
       break;
    }
    // Save this instance in case it is asked for again later..
    listFragment[index] = itemFragment;
   } else {
     // get the fragment we created earlier to avoid re-initializing
     itemFragment = listFragment[index];
   }
  return itemFragment;
 }
 ...

这是一个相当 simple/horrible 的实现..实际上这听起来更像是您需要一个 caching/lazy 加载策略,可能在您的视图分页器中的片段的 onResume 中触发..

public class SampleFragmentPagerAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener {
    final int PAGE_COUNT = 5;
    private String tabTitles[] = new String[] { "Chats", "Groups", "Contacts","Profile" ,"Settings"};
    public SampleFragmentPagerAdapter() {
        super(getSupportFragmentManager());
    }

    @Override
    public int getCount() {
        return PAGE_COUNT;
    }


    @Override
    public CharSequence getPageTitle(int position) {
        return   tabTitles[position];
    }

    @Override
    public Fragment getItem(int position) {

// return PageFragment.create(位置 + 1); 开关(位置){ 案例 0: ChatScreenActivity chatScreenActivity = new ChatScreenActivity(); return 聊天屏幕活动; 情况1: GroupChatActivity groupChatActivity = new GroupChatActivity(); return 群聊活动; 案例 2: ContactsActivity contactsActivity = new ContactsActivity(); return 联系人活动; 案例 3:

              ProfileActivity profileActivity= new ProfileActivity();
                return profileActivity;
            case 4:
                SettingActivity settingActivity = new SettingActivity();
                return settingActivity;

            default:
                return null;
        }
    }

    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {

    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }*use this code and do setadapter for your viewpager*
}