ViewPager的使用
1.在activity_main中用ViewPager留出Fragment所占的位置,注意是v4包的
<android.support.v4.view.ViewPager
android:id="@+id/pager"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1" />
2.新建XML文件写单个Fragment要展示的内容,有几个Fragment就创建几个XML文件
3.创建一个类继承于v4包的FragmentPagerAdapter的FragmentAdapter类,重写他的getItem和getCount方法,写一个构造器,参数为FragmentManager的一个对象,new一个存储Fragment的容器(List)
private List<Fragment> fragments;
public FragmentAdater(FragmentManager fm) {
super(fm);
fragments = new ArrayList<Fragment>();
}
4.新建一个BaseFragment的基类继承于Fragment,在onCreateView时,新建一个布局,让这个布局铺满父容器,再将整个布局转为View return 出去
protected View rootView;
protected int layoutId;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
ViewGroup view = new RelativeLayout(inflater.getContext());
LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, -1);
view.setLayoutParams(params);
rootView = inflater.inflate(layoutId, view);
return rootView;
}
5.在类中也写一个findViewById的方法,使继承于他的类用
public View findViewById(int id) {
return rootView.findViewById(id);
}
6.将每个Fragment 的XML都创建相应的Fragment类继承自BaseFragment,设置他对应的XML文件
public class FindFragment extends BaseFragment {
public FindFragment() {
this.layoutId = R.layout.fragment_find;
}
}
7.在mainActivity中初始化ViewPager,Activity必须是继承与FragmentActivity,否则getSupportFragmentManager()会报错
private void findView() {
btmGroup = (RadioGroup) findViewById(R.id.btm_group);
mViewPager = (ViewPager) findViewById(R.id.pager);//初始化ViewPager
findViewById(R.id.btn1).setId(0);
findViewById(R.id.btn2).setId(1);
findViewById(R.id.btn3).setId(2);
btmGroup.check(0);
}
@SuppressWarnings("deprecation")
private void initFragment() {
mAdapter = new FragmentAdater(getSupportFragmentManager());//新建一个自定义FragmentAdapter,获取到一个事务,要用v4包中FragmentAdapter的getSupportFragmentManager方法
mAdapter.add(new HomeFragment());
mAdapter.add(new FindFragment());
mAdapter.add(new MyFragment());
mViewPager.setAdapter(mAdapter);//给ViewPager设置Adapter
/**
* 当Fragment视图改变时,对应的RadioButton的check也跟着改变
*/
mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int arg0) {
btmGroup.check(arg0);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
}
/**
* 当Group发生改变时,修改ViewPager视图为Group对应的Fragment
*/
private void init() {
btmGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
mViewPager.setCurrentItem(checkedId, true);//参数一为需要设置的RadioButton对应的id,参数二为是否有动画效果
}
});
}