记一次tablayout的使用

大家在开发中难免会碰到多个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("已关闭"));
}

这几行代码就搞定多个标签页的显示

猜你喜欢

转载自blog.csdn.net/chang1611/article/details/82903213