RadioButton+Fragment+VP开发实践
2012 年 2 月 18 日
底部导航栏的实现方式之一。其他实现方式有: Tablayout+Fragment+VP,Bottom Nav+VP
我的其他控件开发实践: TableLayout+Fragment+VP开发实践
主要步骤
-
RadioButton:写布局与设置样式、实现
OnCheckedChangeListener
接口并重写onCheckedChanged
方法、设定初始值check
-
Fragment:初始化并添加
Fragment
、使用FragmentManager
、设置适配器FragmentPagerAdapter
-
ViewPager:实现接口重写
OnPageChangeListener
方法、添加适配器与监听addOnPageChangeListener
XML
activity_min.xml:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context=".MainActivity"> <RadioButton android:id="@+id/Frag1Btn" android:button="@null" android:text="@string/fragment1" android:layout_width="50dp" android:layout_height="50dp" android:layout_weight="1" android:gravity="center">
单个Fragment页面此处省略。
MainActivity
声明:RadioButton、RadioGroup、Fragment、FragmentPagerAdapter(可选)、ViewPager
Fragment
初始化与添加fragment到集合中(两种写法):
private List fragmentList; fragmentList = new ArrayList() //初始化fragment //实例化mlist数组 frag1 = new Fragment1(); fragOne = new Frag_One(); frag2 = new Fragment2(); fragTwo = new Frag_Two(); frag3 = new Fragment3(); = fragThree = new Frag_Three(); frag4 = new Fragment4(); fragmentList.add(fragOne); fragmentList.add(fragTwo); fragmentList = new ArrayList(); fragmentList.add(fragThree); fragmentList.add(frag1); fragmentList.add(frag2); fragmentList.add(frag3); fragmentList.add(frag4);
.add
方法:添加到数组中
FragmentManager
定义FragmentManager
FragmentPagerAdapter
创建Fragment适配器,用于显示每一个页面的内容(此处可为外部类或内部类):
-
实例化FragmentPagerAdapter 并传入ArrayList
:MainFragmentPagerAdapter mainFragmentPagerAdapter = new MainFragmentPagerAdapter(getSupportFragmentManager(),fragmentList);
-
重写三个方法:
public class mainFragmentPagerAdapter extends FragmentPagerAdapter { private List fragmentList; public MainViewPagerAdapter(FragmentManager fragmentManager, List fragmentList) { super(fragmentManager); this.fragmentList = fragmentList; } @Override public Fragment getItem(int position) { //返回每个位置(position)的fragment对象/当前显示的是第几个 return fragmentList.get(position); } @Override public int getCount() { //获得个数 return fragmentList.size(); //返回fragmentlist的个数 } }
RadioGroup
-
实现
RadioGroup.OnpageChangeListener
接口,重写OnCheckedChanged
方法:@Override public void onCheckedChanged(RadioGroup radioGroup, int checkedID) { switch(checkedID) { case R.id.Frag1Btn: viewPager.setCurrentItem(0, true); //此处第二个参数smoothScrool为页面切换动画的启用 case R.id.Frag2Btn: viewPager.setCurrentItem(1, true); case R.id.Frag3Btn: viewPager.setCurrentItem(2, true); case R.id.Frag4Btn: viewPager.setCurrentItem(3, true); default: break; } }
-
设置radiogroup监听与初始选择:
radioGroup.setOnCheckedChangeListener(this); //设置点击监听 radioGroup.check(R.id.Frag1Btn);//设置初始选中按钮
ViewPager
实现 ViewPager.OnpageChangeListener
接口,重写其中 setOnPageChangeListener
:滑动选择方法
@Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { } @Override public void onPageSelected(int position) { switch (position) { case 0: radioGroup.check(R.id.Frag1Btn); break; case 1: radioGroup.check(R.id.Frag2Btn); break; case 2: radioGroup.check(R.id.Frag3Btn); break; case 3: radioGroup.check(R.id.Frag4Btn); break; default: break; } } @Override public void onPageScrollStateChanged(int state) { }
ViewPager
设置ViewPager:
mainViewPager.setAdapter(mainViewPagerAdapter);//添加适配器 mainViewPager.addOnPageChangeListener(this); //设置viewpager页面监听 mainViewPager.setCurrentItem(0); //设置第一个页面
参考链接
Android ViewPager+RadioGroup+Fragment超高仿微信主界面
使用ViewPager+Fragment+RadioGroup实现类似微信主界面
RadioGroup+ViewPager+Fragment的组合使用