【发布时间】:2015-02-18 09:46:11
【问题描述】:
由于在 Android L 中操作栏导航模式已被弃用,我正在寻找另一种方式来拥有选项卡,我发现可以使用 PagerTabStrip (android.support.v4.view.PagerTabStrip),所以我以这种方式创建了 FragmentPageAdapter:
public class TitleAdapter extends FragmentPagerAdapter {
private final String titles[] = new String[] { "Home", "Events", "People", "Books"};
private final Fragment frags[] = new Fragment[titles.length];
Context context;
public TitleAdapter(FragmentManager fm) {
super(fm);
}
@Override
public CharSequence getPageTitle(int position) {
Log.v("TitleAdapter - getPageTitle=", titles[position]);
return titles[position];
}
@Override
public Fragment getItem(int position) {
Log.v("TitleAdapter - getItem=", String.valueOf(position));
//return frags[position];
switch (position) {
case 0:
return Home.newInstance(0, "Home");
case 1:
return Events.newInstance(1, "Events");
case 2:
return People.newInstance(2, "People");
case 4:
return Books.newInstance(3, "Books");
}
return null;
}
@Override
public int getCount() {
return frags.length;
}
}
我在LogCat 中看到的奇怪方式是方法 getItem() 在mainActivity 启动时被调用了 4 次,所以我必须等待很多,因为在每个选项卡中都有一个很长的列表,而这个列表通过调用 Web 服务的 HTTP 请求填充。
我希望每次只加载一个片段,而不是全部。当我使用 actionbar.Tablistener 时,它是可能的,但现在该方法已被弃用,所以有没有办法做到这一点?
我是这样在onCreate方法中设置适配器和viewPager的:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.prova_page_tab_stripes);
mViewPager = (ViewPager) findViewById(R.id.viewpager);
titleAdapter = new TitleAdapter(getSupportFragmentManager());
mViewPager.setAdapter(titleAdapter);
mViewPager.setOffscreenPageLimit(1);
}
【问题讨论】:
标签: android android-viewpager android-5.0-lollipop android-tabs