ViewPager中的片段未立即显示

时间:2015-07-17 12:36:33

标签: android android-fragments android-viewpager

我有一个主要片段,里面有一个viewpager。此viewpager有2页(片段)。一切正常。

当我启动激活时,会显示主片段,我还想显示第一个分页片段(即加载数据)。

目前我有:

@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    viewPager.setCurrentItem(0);
}

@Override
public void onPageSelected(int position) {
    Fragment fragment = (Fragment) pagerAdapter.instantiateItem(viewPager, position);
    if (fragment instanceof IPagedFragment) {
        ((IPagedFragment) fragment).onShown();
    }
}

这是寻呼机适配器:

private static class PagerAdapter extends FragmentPagerAdapter {
    public PagerAdapter(android.support.v4.app.FragmentManager fm) {
        super(fm);
    }

    @Override
    public android.support.v4.app.Fragment getItem(int position) {
        switch (position) {
            case 0:  return Frag1.newInstance();
            case 1:  return Frag2.newInstance();
            default: return null;
        }
    }

   //Other overrides...
}

但是,调用setCurrentItem不会调用onPageSelected

如何强制第一个片段调用其onShown方法?

1 个答案:

答案 0 :(得分:0)

你是对的,ViewPager不会为第一项调用onPageSelected

setCurrentItem也不会触发onPageSelected因为ViewPager的当前页面实际上没有更改。 (初始页面为0) 如果您想知道它是如何工作的,请仔细查看source codesetCurrentItemInternal)。

解决方案是直接拨打onPageSelected(0)而不是setCurrentItem