利用RadioGroup + ViewPager + Fragment实现书签导航

效果展示:
这里写图片描述
实现思路:

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();
    }

}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值