ViewPager 中的片段未立即显示
Fragment within ViewPager not showing immediately
我有一个主片段,里面有一个 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
方法?
你是对的,ViewPager 不会为第一项调用 onPageSelected
。
另外setCurrentItem
不会触发onPageSelected
因为ViewPager的当前Page实际上并没有改变。 (初始页为0)
如果您想知道它是如何工作的,请仔细查看 source code (setCurrentItemInternal
)。
一个解决方案是直接调用 onPageSelected(0)
而不是 setCurrentItem
。
我有一个主片段,里面有一个 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
方法?
你是对的,ViewPager 不会为第一项调用 onPageSelected
。
另外setCurrentItem
不会触发onPageSelected
因为ViewPager的当前Page实际上并没有改变。 (初始页为0)
如果您想知道它是如何工作的,请仔细查看 source code (setCurrentItemInternal
)。
一个解决方案是直接调用 onPageSelected(0)
而不是 setCurrentItem
。