public class TabsActivity extends AppCompatActivity { private FPAdapter adapter; private ViewPager mViewPager; private TabLayout tabLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.tab_layout); mViewPager = (ViewPager) findViewById(R.id.container); tabLayout = (TabLayout) findViewById(R.id.tabs); adapter = new FPAdapter(getSupportFragmentManager()); mViewPager.setAdapter(adapter); tabLayout.setupWithViewPager(mViewPager); } /** * @Description: 自定义Fragment适合器,继承自FragmentPagerAdapter * @Author: Yong QQ:281997672@qq.com * @Created at: 2017/3/3 15:20 */ Fragment[] fragments = {new Image1Fragment(), new Image2Fragment(), new Image3Fragment()}; boolean[] fragmentsUpdateFlag = {false, false, false}; public class FPAdapter extends FragmentPagerAdapter { FragmentManager fm; public FPAdapter(FragmentManager fm) { super(fm); this.fm = fm; } @Override public int getCount() { return fragments.length; } @Override public Fragment getItem(int position) { Fragment fragment = fragments[position % fragments.length]; return fragment; } @Override public Object instantiateItem(ViewGroup container, int position) { //得到缓存的fragment Fragment fragment = (Fragment) super.instantiateItem(container, position); //得到tag,这点很重要 String fragmentTag = fragment.getTag(); //如果这个fragment需要更新 if (fragmentsUpdateFlag[position % fragmentsUpdateFlag.length]) { FragmentTransaction ft = fm.beginTransaction(); ft.remove(fragment);//移除旧的fragment fragment = fragments[position % fragments.length];//换成新的fragment ft.add(container.getId(), fragment, fragmentTag);//添加新fragment时必须用前面获得的tag,这点很重要 ft.attach(fragment); ft.commit(); fragmentsUpdateFlag[position % fragmentsUpdateFlag.length] = false;//复位更新标志 } return fragment; } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); } @Override public CharSequence getPageTitle(int position) { switch (position) { case 0: return "SECTION 1"; case 1: return "SECTION 2"; case 2: return "SECTION 3"; default: return null; } } } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.design.widget.TabLayout android:id="@+id/tabs" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.v4.view.ViewPager android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>
本文介绍了一个使用ViewPager和TabLayout实现页面切换功能的TabsActivity类。该类通过自定义FPAdapter适配器来管理多个Fragment,并实现了根据不同的Tab显示相应Fragment的功能。
541

被折叠的 条评论
为什么被折叠?



