原文(很不错的三种tab界面切换):https://www.cnblogs.com/caobotao/p/5103673.html

我用的是第三种方式:使用 ViewPager + Fragment

BaseActivity

package com.dream;import android.support.v7.app.AppCompatActivity;import android.view.KeyEvent;import android.widget.Toast;public class BaseActivity extends AppCompatActivity {    private long exitTime = 0;    /**     * 拦截返回键     * @param keyCode     * @param event     * @return     */    @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){            if((System.currentTimeMillis()-exitTime) > 2000){                Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();                exitTime = System.currentTimeMillis();            } else {                finish();//                JActivityManager.getInstance().closeAllActivity();                System.exit(0);            }            return true;        }        return super.onKeyDown(keyCode, event);    }}

HomeActivity

package com.dream;import android.os.Bundle;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentActivity;import android.support.v4.app.FragmentPagerAdapter;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.view.Window;import android.widget.LinearLayout;import android.widget.TextView;import com.dream.home.Tab1Fragment;import com.dream.home.Tab2Fragment;import com.dream.home.Tab3Fragment;import java.util.ArrayList;import java.util.List;public class HomeActivity extends BaseActivity implements View.OnClickListener {    //声明ViewPager    private ViewPager mViewPager;    //适配器    private FragmentPagerAdapter mAdapter;    //装载Fragment的集合    private List mFragments;    //3个Tab对应的布局    private LinearLayout mTab1;    private LinearLayout mTab2;    private LinearLayout mTab3;    //3个Tab对应的ImageButton    private TextView mImg1;    private TextView mImg2;    private TextView mImg3;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        // 指定布局界面        setContentView(R.layout.activity_home);        // 隐藏操作栏        getSupportActionBar().hide();        initViews();//初始化控件        initEvents();//初始化事件        initDatas();//初始化数据    }    private void initDatas() {        mFragments = new ArrayList<>();        //将3个Fragment加入集合中        mFragments.add(new Tab1Fragment());        mFragments.add(new Tab2Fragment());        mFragments.add(new Tab3Fragment());        //初始化适配器        mAdapter = new FragmentPagerAdapter(getSupportFragmentManager()) {            @Override            public Fragment getItem(int position) {//从集合中获取对应位置的Fragment                return mFragments.get(position);            }            @Override            public int getCount() {//获取集合中Fragment的总数                return mFragments.size();            }        };        //不要忘记设置ViewPager的适配器        mViewPager.setAdapter(mAdapter);        //设置ViewPager的切换监听        mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {            @Override            //页面滚动事件            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {            }            //页面选中事件            @Override            public void onPageSelected(int position) {                //设置position对应的集合中的Fragment                mViewPager.setCurrentItem(position);                resetImgs();                selectTab(position);            }            @Override            //页面滚动状态改变事件            public void onPageScrollStateChanged(int state) {            }        });    }    private void initEvents() {        //设置三个Tab的点击事件        mTab1.setOnClickListener(this);        mTab2.setOnClickListener(this);        mTab3.setOnClickListener(this);    }    //初始化控件    private void initViews() {        mViewPager = (ViewPager) findViewById(R.id.id_viewpager);        mTab1 = (LinearLayout) findViewById(R.id.linear_tab1);        mTab2 = (LinearLayout) findViewById(R.id.linear_tab2);        mTab3 = (LinearLayout) findViewById(R.id.linear_tab3);        mImg1 = (TextView) findViewById(R.id.tab_1);        mImg2 = (TextView) findViewById(R.id.tab_2);        mImg3 = (TextView) findViewById(R.id.tab_3);    }    @Override    public void onClick(View v) {        //先将四个ImageButton置为灰色        resetImgs();        //根据点击的Tab切换不同的页面及设置对应的ImageButton为绿色        switch (v.getId()) {            case R.id.linear_tab1:                selectTab(0);                break;            case R.id.linear_tab2:                selectTab(1);                break;            case R.id.linear_tab3:                selectTab(2);                break;        }    }    private void selectTab(int i) {        //根据点击的Tab设置对应的ImageButton为绿色        TextView title = (TextView)findViewById(R.id.top_title);        switch (i) {            case 0:                title.setText("tab1");                mImg1.setTextColor(this.getResources().getColor(R.color.green));                break;            case 1:                title.setText("tab2");                mImg2.setTextColor(this.getResources().getColor(R.color.green));                break;            case 2:                title.setText("tab3");                mImg3.setTextColor(this.getResources().getColor(R.color.green));                break;        }        //设置当前点击的Tab所对应的页面        mViewPager.setCurrentItem(i);    }    //将四个ImageButton设置为灰色    private void resetImgs() {        mImg1.setTextColor(this.getResources().getColor(R.color.gray));        mImg2.setTextColor(this.getResources().getColor(R.color.gray));        mImg3.setTextColor(this.getResources().getColor(R.color.gray));    }}

各个tab对应的Fragment

Tab1Fragment 

public class Tab1Fragment extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.home_tab1, container, false);        return view;    }}

Tab2Fragment 

public class Tab2Fragment extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.home_tab2, container, false);        return view;    }}
Tab3Fragment
public class Tab3Fragment extends Fragment {    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.home_tab3, container, false);        return view;    }}

界面布局文件 activity_home.xml

<?xml version="1.0" encoding="utf-8"?>                                        

 

顶部布局文件 home_top.xml

<?xml version="1.0" encoding="utf-8"?>    

底部布局文件 home_bottom.xml

<?xml version="1.0" encoding="utf-8"?>                                                                                                                                                                                                                                                                                                

三个tab对应的布局文件

home_tab1.xml

<?xml version="1.0" encoding="utf-8"?>

home_tab2.xml

<?xml version="1.0" encoding="utf-8"?>    

home_tab3.xml

<?xml version="1.0" encoding="utf-8"?>    

 

更多相关文章

  1. Android创建和配置布局动画
  2. Android中Activity触摸事件传递源码学习
  3. Android 监听按钮点击事件的三种方式(1:匿名内部类;2:外部类;3:接口方
  4. android的两种布局------------------------经自身测试,完全正确
  5. android listView 自定义布局结合CheckedTextView实现多选
  6. android布局属性: android:visibility
  7. Android 拦截TextView中超链接点击事件
  8. android中填充界面布局的三种方式
  9. Android 多扩展布局ChipGroup使用

随机推荐

  1. Spring 天天用,bean 懒加载原理你懂吗?
  2. Pytorch
  3. [SpringCloud教程]6. OpenFeign远程接口
  4. 优雅spring-boot项目启动,停止,重启脚本
  5. spring工程搭建
  6. spring boot 集成Swagger
  7. Spring-AOP
  8. Spring Boot - axios upload file(带请求
  9. echarts 超过预警值后节点变红预警
  10. Spring Boot - XMLHttpRequest Upload(上