1、使用Fragment+Fragment Manager动态控制Fragment的出现和消失,没有滑动功能
就是底部几个按钮,通过按钮的点击来控制页面的变换
隐藏Fragment的代码,避免同时出现多个Fragment
private void hideFragment(FragmentTransaction transaction) {
if (lifeFragment != null) {
transaction.hide(lifeFragment);
}
if (techFragment != null) {
transaction.hide(techFragment);
}
if (mineFragment != null) {
transaction.hide(mineFragment);
}
if(collectionFragment!=null){
transaction.hide(collectionFragment);
}
显示Fragment的代码
private void setTab(int n) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
resetButton();
// 为了防止同时显示多个fragment,先把所有的fragment隐藏
hideFragment(transaction);
switch (n) {
case 0:
ib_life.setImageResource(R.mipmap.life_tabp);
// 如果fragment未建立,新建一个然后添加到FrameLayout
if (lifeFragment == null) {
lifeFragment = new LifeFragment();
transaction.add(R.id.frameLayout, lifeFragment);
} else {
// 如果已经建立,直接显示
transaction.show(lifeFragment);
}
break;
case 1:
ib_tech.setImageResource(R.mipmap.tech_tabp);
if (techFragment == null) {
techFragment = new TechFragment();
transaction.add(R.id.frameLayout, techFragment);
} else {
transaction.show(techFragment);
}
break;
case 2:
ib_mine.setImageResource(R.mipmap.mine_tabp);
if (mineFragment == null) {
mineFragment = new MineFragment();
transaction.add(R.id.frameLayout, mineFragment);
} else {
transaction.show(mineFragment);
}
break;
}
transaction.commit();
}
按钮的点击事件,关联Fragment的出现与否
public void onClick(View view) {
switch (view.getId()) {
case R.id.imageButton_life:
setTab(0);
break;
case R.id.imageButton_tech:
setTab(1);
break;
case R.id.imageButton_mine:
setTab(2);
break;
}
把显示Fragment的代码抽离出来后,可以在onCreate()方法中,初始化Fragment,显示第一个布局。
2、使用Fragment+ViewPager+FragmentPageAdapter实现(因为有ViewPager可以实现滑动的效果,当然也可以实现点击切换)
实现FragmentPageAdapter声明一个fragment的List,然后填充到ViewPager【adapter都是为了给组件填充数据的】
mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {
@Override
public android.support.v4.app.Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
};
设置ViewPager的页面改动的监听事件,这里仅仅是改变下方按钮的颜色
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
resetButton();
switch(position){
case 0:
imageButton_1.setImageResource(R.mipmap.tabp_1);
break;
case 1:
imageButton_2.setImageResource(R.mipmap.tabp_2);
break;
case 2:
imageButton_3.setImageResource(R.mipmap.tabp_3);
break;
case 3:
imageButton_4.setImageResource(R.mipmap.tabp_4);
break;
}
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
}
设置按钮的点击切换ViewPager页面setCurrentItem(num);
public void onClick(View view) {
resetButton();
switch(view.getId()){
case R.id.imageButton_1:
viewPager.setCurrentItem(0);
break;
case R.id.imageButton_2:
viewPager.setCurrentItem(1);
break;
case R.id.imageButton_3:
viewPager.setCurrentItem(2);
break;
case R.id.imageButton_4:
viewPager.setCurrentItem(3);
break;
}
}
3、TabLayout+ViewPager+Fragment+FragmentPageAdapter
【1】设置adapter填充数据
adapter = new FragmentPagerAdapter(getFragmentManager()) {
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
};
【2】tabLayout添加标签
tabLayout.addTab(tabLayout.newTab().setText(R.string.android));
tabLayout.addTab(tabLayout.newTab().setText(R.string.java));
tabLayout.addTab(tabLayout.newTab().setText(R.string.others));
【3】在onCreateActicity()方法中设置tablayout标签选中的事件,只要让ViewPager显示特定页面就行了
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
viewPager.setCurrentItem(tab.getPosition());
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
}
使用这个方法,将tabLayout和viewPager联系起来,必须在adapter中重写getPageTitle()来返回标签的文字
tabLayout.setupWithViewPager(viewPager);
“`