效果展示:
实现思路:
1.底部有多少个书签,就创建多少个Feagment。在drawable中绘制选择器selector,也就是底部的书签。
2.初始化数据:找到Fragment对象,Fragment fragmentA = new Fragment_A();把对象加入集合。
3.适配数据:创建一个类,继承FragmentPagerAdapter适配器,把Fragment管理器:getSupportFragmentManager(),数据集合传送过去。
4.把适配到的数据适配到ViewPager中进行展示。
5.监听RadioGroup的变化,当切换RadioBtton时,Fragment也会对应的切换的步骤:
a1 . 利用RadioGroup的setOnCheckedChangeListener来监听RadiBtton的变化
a2 . 利用RadioBtton的id来判断要点击的那个button。
a3 . viewPager.setCurrentItem(0);此方法用于将切换到viewpager的第几个页面(0位序号)。
a4 . 注意:a2中的id和a3中的第几个页面一定要和布局中的控件排序要一一对应。
也就是说布局中name标签放在了最左边,那么name标签对应的Fragment的一定要是ViewPager的第0个页面.
6. 监听ViewPager的变化,当滑动屏幕的Fragment时,RadioBtton也会相对应的切换的步骤:
a1 .利用 viewPager.addOnPageChangeListener方法来监听ViewPager的变化。
a2 . 重写该监听器的方法,在onPageSelected方法下进行回调信息。
a2.1:回调:因为ViewPager中Fragment的position和RadioBtton是一一对应的,
所有当ViewPager进行滑动时,RadioBtton也会相应的切换。
RadioButton radioButton = (RadioButton) radioGroup.getChildAt(position);
radioGroup.check(radioButton.getId());//通过该button的id找到该button,并选中该button。
代码展示:
1.MainActivity的Code:
public class RadioGroup_ViewPager_Fragment extends AppCompatActivity{
private List<Fragment> list;
private RadioGroup radioGroup;
private ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.radiogroup_viewpager_fragment);
viewPager = (ViewPager) findViewById(R.id.viewpager2);
radioGroup = (RadioGroup) findViewById(R.id.radiogroup);
//监听RadioGroup的变化
radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup radioGroup, int checkedId) {
switch (checkedId){
case R.id.game:
viewPager.setCurrentItem(0);//此方法用于将切换到viewpager的第几个页面
break;
case R.id.appgroup:
viewPager.setCurrentItem(1);//这4个id顺序和不能乱,要和布局中的顺序一样
break;
case R.id.home:
viewPager.setCurrentItem(2);
break;
case R.id.manager:
viewPager.setCurrentItem(3);
break;
}
}
});
//ViewPager的监听,当Viewpager页面改变时监听。
viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
//当Viewpager页面改变时回调,返回值当前被选择的页面位置
@Override
public void onPageSelected(int position) {
//获取传入参数(index 序号) 来获取子控件
// ViewPager的position和RadioBtton的index是一一对应的。
RadioButton radioButton = (RadioButton) radioGroup.getChildAt(position);//RadioGroup通过序号找到RaidoBtton
radioGroup.check(radioButton.getId());
}
@Override
public void onPageScrollStateChanged(int state) {
}
});
loadData();
BaseFragmentPagerAdapter adapter = new BaseFragmentPagerAdapter(getSupportFragmentManager(),list);
viewPager.setAdapter(adapter);
}
private void loadData() {
list = new ArrayList<Fragment>();
Fragment fragmentA = new Fragment_A();
list.add(fragmentA);
Fragment fragmentB = new Fragment_B();
list.add(fragmentB);
Fragment fragmentC = new Fragment_C();
list.add(fragmentC);
Fragment fragmentD = new Fragment_D();
list.add(fragmentD);
}
}
2.准备4个Fragment:
public class Fragment_A extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.a_fragmnet,container,false);
}
}
3 .在drawable中绘制4个选择器selector,也就是底部的书签。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@mipmap/bottombar_game_pressed" android:state_checked="true"/>
<item android:drawable="@mipmap/bottombar_game_pressed" android:state_selected="true"/>
<item android:drawable="@mipmap/bottombar_game_normal"/>
</selector>
4.FragmentPagerAdapter适配器的代码:
public class BaseFragmentPagerAdapter extends FragmentPagerAdapter {
private List<Fragment> list;
public BaseFragmentPagerAdapter(FragmentManager fm, List<Fragment> list) {
super(fm);
this.list=list;
}
@Override
public Fragment getItem(int position) {
return list.get(position);
}
@Override
public int getCount() {
return list.size();
}
}