1.主要的Activity——MemberDetailActivity
2.Activity视图的xml文件——R.layout.activity_member_detail
3.自定义的Fragment子类——CustomTrainingFragment
4.Fragment视图的xml文件——
5.自定义Fragment子类的适配器
//1.MemberDetailActivity
package com.vimems.coach;import android.os.Bundle;import android.support.design.widget.TabLayout;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.view.ViewPager;import android.widget.TableLayout;import com.vimems.Adapter.CustomTrainingFragmentPageAdapter;import com.vimems.R;import java.util.ArrayList;import java.util.List;import util.BaseActivity;public class MemberDetailActivity extends BaseActivity { private CustomTrainingFragmentPageAdapter pageAdapter; private ViewPager viewPager; private TabLayout tabLayout; List<Fragment> fragmentList; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_member_detail); // TODO: 2/10/2019 暂时用一个fragment代替 fragmentList=new ArrayList<>(); fragmentList.add(new CustomTrainingFragment()); fragmentList.add(new CustomTrainingFragment()); fragmentList.add(new CustomTrainingFragment()); FragmentManager fragmentManager=getSupportFragmentManager(); pageAdapter=new CustomTrainingFragmentPageAdapter(fragmentManager,fragmentList); viewPager=findViewById(R.id.training_mode_viewpager); tabLayout=findViewById(R.id.training_mode_tab); viewPager.setAdapter(pageAdapter); //让TabLayout与viewpager产生联动 tabLayout.setupWithViewPager(viewPager); }}
//R.layout.activity_member_detail
//包含一个TabLayout和一个ViewPager
<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto" android:orientation="vertical"> <TextView android:paddingTop="20dp" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/single_mode" android:gravity="center"/> <!--todo 可以改为一个TableLa+ViewPage--> <android.support.design.widget.TabLayout android:id="@+id/training_mode_tab" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabMode="fixed" app:tabGravity="fill"> </android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/training_mode_viewpager" android:layout_width="match_parent" android:layout_height="match_parent" > </android.support.v4.view.ViewPager></android.support.v7.widget.LinearLayoutCompat>
//3CustomTrainingFragment package com.vimems.coach;import android.os.Bundle;import android.support.annotation.NonNull;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import com.vimems.R;public class CustomTrainingFragment extends Fragment { public static final String ARG_PAGE="ARG_PAGE"; private int mPage; //使用newInstance的方式,或者在CustomTrainingFragmentPageAdapter中添加一个列表// fragments=new ArrayList<>();// //将提前写好三个Fragment添加到集合中// fragments.add(new FirstFragment());// fragments.add(new SecondFragment());// fragments.add(new ThirdFragment());// 在适配器的构造方法中传入参数fragmentManage、fragments// 在适配器的getItem方法中return fragments.get(position) public static CustomTrainingFragment newInstance(int page){ Bundle bundle=new Bundle(); bundle.putInt(ARG_PAGE,page); CustomTrainingFragment customTrainingFragment=new CustomTrainingFragment(); customTrainingFragment.setArguments(bundle); return customTrainingFragment; } @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); mPage=getArguments().getInt(ARG_PAGE); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view=inflater.inflate(R.layout.fragment_custom_training,container,false); return view; }}
//4.Fragment的布局文件,<?xml version="1.0" encoding="utf-8"?><android.support.v7.widget.LinearLayoutCompat xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <android.support.v7.widget.LinearLayoutCompat android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:paddingLeft="10dp"> <TextView android:text="@string/custom_training_options" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="center" android:textStyle="bold" /> <RadioGroup android:id="@+id/custom_training_options" android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <RadioButton android:id="@+id/custom_training_options_gain_muscle" android:text="@string/custom_training_options_gain_muscle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <RadioButton android:id="@+id/custom_training_options_lose_fat" android:text="@string/custom_training_options_lose_fat" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <RadioButton android:id="@+id/custom_training_options_shape" android:text="@string/custom_training_options_shape" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> <RadioButton android:id="@+id/custom_training_options_recovery" android:text="@string/custom_training_options_recovery" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/> </RadioGroup> </android.support.v7.widget.LinearLayoutCompat> <FrameLayout android:id="@+id/custom_training_options_fragment" android:layout_width="match_parent" android:layout_height="match_parent"></FrameLayout></android.support.v7.widget.LinearLayoutCompat>
//fragment的适配器CustomTrainingFragmentPageAdapter package com.vimems.Adapter;import android.content.Context;import android.support.annotation.Nullable;import android.support.v4.app.Fragment;import android.support.v4.app.FragmentManager;import android.support.v4.app.FragmentPagerAdapter;import com.vimems.coach.CustomTrainingFragment;import java.util.List;import util.Constants;public class CustomTrainingFragmentPageAdapter extends FragmentPagerAdapter { private List<Fragment> fragmentList; private static final String[] tabTitle=Constants.TRAINING_MODE; public CustomTrainingFragmentPageAdapter(FragmentManager fm, List<Fragment> fragmentList) { super(fm); this.fragmentList=fragmentList; } @Override public Fragment getItem(int i) {// 用自定义Fragment的newInstance()方法返回一个实例// return CustomTrainingFragment.newInstance(i); // 自定义的fragment列表 return fragmentList.get(i); //return CustomTrainingFragment.newInstance(i+1); } @Override public int getCount() { return tabTitle.length; }// 添加tab的标题title// 如下这种使用方式好像不行// mTabLayout = (TabLayout) findViewById(R.id.tabLayout);// TabLayout.Tab tab1 = mTabLayout.newTab()// //设置tab项显示的文字// .setText("tab1");// TabLayout.Tab tab2 = mTabLayout.newTab().setText("tab2");// TabLayout.Tab tab3 = mTabLayout.newTab().setText("tab3");// mTabLayout.addTab(tab1);// mTabLayout.addTab(tab2);// mTabLayout.addTab(tab3); @Nullable @Override public CharSequence getPageTitle(int position) { return tabTitle[position]; }}