1.填加依赖
compile 'com.android.support:design:23.2.1'
2.LinearLayout垂直布局下
<android.support.design.widget.TabLayout android:id="@+id/id_tablayout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" app:tabGravity="fill" app:tabIndicatorColor="@color/main_color" app:tabMode="fixed" app:tabSelectedTextColor="@color/main_color" app:tabTextColor="#000000"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/vp_viewpager" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="1"></android.support.v4.view.ViewPager>
3.java代码
public class MainActivity extends AppCompatActivity { private TabLayout mTabLayout; private ViewPager mViewPager; private String[] mTitles = new String[]{"tab1", "tab2","tab3"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { mTabLayout = (TabLayout) findViewById(R.id.id_tablayout); mViewPager = (ViewPager) findViewById(R.id.vp_viewpager); List<Fragment> list = new ArrayList<>(); list.add(FestivalCategoryFragment.newInstance()); list.add(FestivalCategoryFragment.newInstance()); list.add(FestivalCategoryFragment.newInstance()); mViewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), list, mTitles)); mTabLayout.setupWithViewPager(mViewPager); } }
public class FestivalCategoryFragment extends Fragment { private View view; private GridView mGridView; private ArrayAdapter<Festival> adapter; private LayoutInflater inflater; public static Fragment newInstance() { return new FestivalCategoryFragment(); } @Nullable @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { view = inflater.inflate(R.layout.fragment_festival_category, container, false); initView(); return view; } private void initView() { inflater = LayoutInflater.from(getActivity()); mGridView = (GridView) view.findViewById(R.id.gridView); adapter = new ArrayAdapter<Festival>(getActivity(), -1, FestivalLab.getInstance().getFestivals()) { @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = inflater.inflate(R.layout.item_festival, parent, false); } TextView tv = (TextView) convertView.findViewById(R.id.tv_festival_name); tv.setText(getItem(position).getName()); return convertView; } }; mGridView.setAdapter(adapter); mGridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // TODO: 2016/5/14 } }); } }fragment布局为一个gridview ,下面子条目布局,用了cardview(有水波纹效果)
<android.support.v7.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:clickable="true" android:focusable="true" android:foreground="?android:attr/selectableItemBackground"> <TextView android:id="@+id/tv_festival_name" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#ffffff" android:gravity="center" android:padding="10dp" /> </android.support.v7.widget.CardView>
4.ViewPagerAdapter代码
/** * 滑动视图适配器 */ public class ViewPagerAdapter extends FragmentStatePagerAdapter { private List<Fragment> fragmentList; private String[] titleList; public ViewPagerAdapter(FragmentManager fm, List<Fragment> fragmentList ,String[] titleList) { super(fm); this.fragmentList = fragmentList; this.titleList = titleList; } @Override public Fragment getItem(int position) { return fragmentList.get(position); } @Override public int getCount() { return fragmentList.size(); } // 初始化每个页卡选项 @Override public Object instantiateItem(ViewGroup arg0, int arg1) { // TODO Auto-generated method stub return super.instantiateItem(arg0, arg1); } @Override public void destroyItem(ViewGroup container, int position, Object object) { System.out.println( "position Destory" + position); super.destroyItem(container, position, object); } @Override public CharSequence getPageTitle(int position) { return titleList[position]; } }