效果图


概要:很多时候我们都有遇到左右切换tab页面的场景,本文主要用到android.support.design.widget.TabLayout、android.support.v4.view.ViewPager、android.support.v4.app.Fragment都是系统自带的兼容性控件没有多少技术难点。

一个Activity一个Fragment一个Adapter两个布局文件

本例步骤:

1、添加布局文件

MainActivity的布局activity_main.xml

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


DataFragment的布局layput_data_fragment.xml

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

2、MainActivity类

package com.hb.tablayoutdemo;import android.os.Bundle;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.view.ViewPager;import android.support.v7.app.AppCompatActivity;import com.hb.tablayoutdemo.adapter.MyPagerAdapter;import java.util.ArrayList;import java.util.List;public class MainActivity extends AppCompatActivity implements TabLayout.OnTabSelectedListener {    private TabLayout tabLayout;    private ViewPager viewPager;    private List datas = new ArrayList<>();    private List fragments = new ArrayList<>();    private MyPagerAdapter adapter;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        findViews();        initDatas();        initViews();    }    private void initDatas() {        datas.add("test1");        datas.add("test2");        datas.add("test3");        datas.add("test4");        datas.add("test5");    }    private void findViews() {        tabLayout = findViewById(R.id.tabLayout);        viewPager = findViewById(R.id.viewPager);    }    private void initViews() {        //循环注入标签        for (String tab : datas) {            tabLayout.addTab(tabLayout.newTab().setText(tab));        }        //设置TabLayout点击事件        for (int i = 0; i < 5; i++) {            fragments.add(DataFragment.newInstance(i));        }        tabLayout.addOnTabSelectedListener(this);        adapter = new MyPagerAdapter(getSupportFragmentManager(), datas, fragments);        viewPager.setAdapter(adapter);        tabLayout.setupWithViewPager(viewPager);    }    @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) {    }}


3、DataFragment类

package com.hb.tablayoutdemo;import android.os.Bundle;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.TextView;/** * Created by Administrator on 2017/12/28. */public class DataFragment extends Fragment {    public static final String ARGS_PAGE = "args_page";    private int mPage;    private TextView textView;    public static DataFragment newInstance(int page) {        Bundle args = new Bundle();        args.putInt(ARGS_PAGE, page);        DataFragment fragment = new DataFragment();        fragment.setArguments(args);        return fragment;    }    @Override    public void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        mPage = getArguments().getInt(ARGS_PAGE);    }    @Nullable    @Override    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {        View rootView = inflater.inflate(R.layout.layput_data_fragment, container, false);        textView = rootView.findViewById(R.id.textView);        textView.setText("第"+mPage+"页");        return rootView;    }}

4、ViewPager适配器

package com.hb.tablayoutdemo.adapter;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import java.util.ArrayList;import java.util.List;/** * Created by Administrator on 2017/12/28. */public class MyPagerAdapter extends FragmentPagerAdapter {    List list;    List fragments = new ArrayList<>();    public MyPagerAdapter(FragmentManager fm, List list, List fragments) {        super(fm);        this.list = list;        this.fragments = fragments;    }    @Override    public Fragment getItem(int position) {        return fragments.get(position);    }    @Override    public CharSequence getPageTitle(int position) {        return list.get(position);    }    @Override    public int getCount() {        return fragments != null ? fragments.size() : 0;    }}


OK就是这些,其中mPage是activity传递到fragment中的一个动态参数。

有什么问题尽可留言。


更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android:横屏时禁止输入法全屏
  6. 可能是最通用全面的Android(安卓)studio打包jar方法
  7. android studio 3.0版本下使用lambda表达式的正确配置姿势
  8. Native Service 创建过程
  9. Binary XML file line #11: You must supply a layout_width att

随机推荐

  1. Android(安卓)Action使用实例
  2. android适配器:ArrayAdapter
  3. SystemServer 分析
  4. Android(安卓)NDK学习(5)调用.so文件
  5. 深入浅出Android(安卓)Support Annotatio
  6. as报错
  7. Android删除Alarm的方法
  8. TextView添加Onclick点击无效没反应解决
  9. Android(安卓)实现序列化:Parcelable和Ser
  10. android Dialog 底部弹出