显示片段之前未调用

时间:2015-12-26 08:18:44

标签: java android android-fragments android-pageradapter

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

我的意思是,我不想在活动调用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);
}

2 个答案:

答案 0 :(得分:0)

不要在活动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;
 }
 ...

这是一个相当简单/可怕的实现..实际上听起来更像是你需要一个缓存/延迟加载策略,可能是在你的视图分页器中片段的onResume中触发的。

答案 1 :(得分:0)

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) {

//返回PageFragment.create(position + 1);             开关(位置){                 案例0:                     ChatScreenActivity chatScreenActivity = new ChatScreenActivity();                     return chatScreenActivity;                 情况1:                     GroupChatActivity groupChatActivity = new GroupChatActivity();                     return groupChatActivity;                 案例2:                     ContactsActivity contactsActivity = new ContactsActivity();                     return contactsActivity;                 案例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*
}