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

来源:互联网 发布:公开网络摄像头 编辑:程序博客网 时间:2024/06/06 07:05

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

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