大家在开发中难免会碰到多个tab,我们之前的就是viewpage+fragment或者radionbutton之类的,随着安卓版本的不断更新不断升级,专门针对tab开发了组件,用起来是相当方便,tablayout.,话不多说直接上代码
第一部分xml布局
<android.support.design.widget.TabLayout app:tabTextAppearance="@style/TextAppearance.Design.Tab.Custom" android:id="@+id/tab_book" android:layout_width="match_parent" android:layout_height="45dp" app:tabBackground="@color/white" app:tabIndicatorColor="@color/main" app:tabSelectedTextColor="@color/main" app:tabTextColor="@color/gray" app:tabMode="fixed" app:tabIndicatorHeight="2dp" /> <android.support.v4.view.ViewPager android:id="@+id/vp_book" android:layout_width="match_parent" android:layout_height="match_parent"> </android.support.v4.view.ViewPager>
第二部分adapter
public class MyFragmentPagerAdapter extends FragmentPagerAdapter { private List<?> mFragment; private List<String> mTitleList; /** * 普通,主页使用 */ public MyFragmentPagerAdapter(FragmentManager fm, List<?> mFragment) { super(fm); this.mFragment = mFragment; } /** * 接收首页传递的标题 */ public MyFragmentPagerAdapter(FragmentManager fm, List<?> mFragment, List<String> mTitleList) { super(fm); this.mFragment = mFragment; this.mTitleList = mTitleList; } @Override public Fragment getItem(int position) { return (Fragment) mFragment.get(position); } @Override public int getCount() { return mFragment.size(); } @Override public void destroyItem(ViewGroup container, int position, Object object) { super.destroyItem(container, position, object); } /** * 首页显示title,每日推荐等.. * 若有问题,移到对应单独页面 */ @Override public CharSequence getPageTitle(int position) { if (mTitleList != null && position < mTitleList.size()) { return mTitleList.get(position); } else { return ""; } } public void addFragmentList(List<?> fragment) { this.mFragment.clear(); this.mFragment = null; this.mFragment = fragment; notifyDataSetChanged(); } }
第三部分 fragment
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/srl_pending" android:layout_width="match_parent" android:layout_height="match_parent" > <com.example.xrecyclerview.XRecyclerView android:id="@+id/xrv_pending" android:layout_width="match_parent" android:layout_height="match_parent" android:scrollbars="vertical" /> </android.support.v4.widget.SwipeRefreshLayout> </LinearLayout>
fragment 的内容随便写
第四部分
public class PendingFragment extends Fragment { private PendingAdapter pendingAdapter; private ArrayList<NoticeBean> noticeBeans=null; private String mTitle; SwipeRefreshLayout swipeRefreshLayout; XRecyclerView xRecyclerView; public static PendingFragment getInstance(String title) { PendingFragment sf = new PendingFragment(); sf.mTitle = title; return sf; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view=inflater.inflate(R.layout.fragment_pending, container, false); return view; } }
第五部分 activity的实现
private ArrayList<String> mTitleList = new ArrayList<>(5); private ArrayList<Fragment> mFragments = new ArrayList<>(5);
这两个list一个是存储标签的,一个是存储fragment的
ViewPager viewPager=view.findViewById(R.id.vp_book); TabLayout tableLayout=view.findViewById(R.id.tab_book); MyFragmentPagerAdapter myAdapter = new MyFragmentPagerAdapter(getChildFragmentManager(), mFragments, mTitleList); viewPager.setAdapter(myAdapter); viewPager.setOffscreenPageLimit(2); myAdapter.notifyDataSetChanged(); tableLayout.setTabMode(TabLayout.MODE_FIXED); tableLayout.setupWithViewPager(viewPager); } private void initFragmentList() { //private String[] mTitles = {"待处理","待完成","已完成","已退款","已关闭"}; mTitleList.clear(); mFragments.clear(); mTitleList.add("待处理"); mTitleList.add("待完成"); mTitleList.add("已完成"); mTitleList.add("已退款"); mTitleList.add("已关闭"); mFragments.add(PendingFragment.getInstance("待处理")); mFragments.add(ProcessedFragment.getInstance("待完成")); mFragments.add(DoneFragment.getInstance("已完成")); mFragments.add(RefundedFragment.getInstance("已退款")); mFragments.add(ClosedFragment.getInstance("已关闭")); }
这几行代码就搞定多个标签页的显示