fragment中添加ViewPager实现界面切换,动态添加radiobutton

fragment中,有viewpager实现界面滑动展示:

首先是布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <RadioGroup
        android:id="@+id/rGroup"
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">
    </RadioGroup>
    <View
        android:layout_width="match_parent"
        android:layout_height="1px"
        android:background="#a88b8787"></View>
    <android.support.v4.view.ViewPager
        android:id="@+id/vp"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
    </android.support.v4.view.ViewPager>
</LinearLayout>


其次是java代码:

fragment有关都是v4包下导入

public class RbFragment1 extends Fragment {
    private ViewPager vp;
    private RadioGroup rg;
    private RadioButton[] radioButtons;
    private String[] datas = {"1111111", "2222222", "3333333"};
    private MainmainActivity mActivity;
    private List<Fragment> fragments;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_rb1, container, false);
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mActivity = (MainmainActivity) getActivity();
        vp = (ViewPager) mActivity.findViewById(R.id.vp);
        fragments = new ArrayList<>();
        fragments.add(new VPFragment1());
        fragments.add(new VPFragment2());
        fragments.add(new VPFragment3());
        vp.setAdapter(new VpAdapter(getFragmentManager()));
        //viewpager的页面切换事件
        vp.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

            }

            @Override
            public void onPageSelected(int position) {
                radioButtons[position].setChecked(true);
            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });
        rg = (RadioGroup) mActivity.findViewById(R.id.rGroup);
        radioButtons = new RadioButton[datas.length];
        for (int i = 0; i < datas.length; i++) {
            RadioButton rbb = new RadioButton(getActivity());
            //为了去除radiobutton自带的圆圈
            Bitmap bm = null;
            rbb.setButtonDrawable(new BitmapDrawable(bm));
            //设置radiobutton的点击效果   自己定义一个drawable
            rbb.setBackgroundResource(R.drawable.rb_bac_drawable);
            //为radiobutton设置显示文字
            rbb.setText(datas[i]);
            //设置文字显示是否居中
            rbb.setGravity(Gravity.CENTER);
            // 获取屏幕宽度
            int screenWidth = getResources().getDisplayMetrics().widthPixels;
            //获取每个tag的宽度
            int eachWidth = screenWidth / datas.length;
            //设置每个条目的宽度和高度,宽度就是上面得到的平均值,高度是包裹内容
            ViewGroup.LayoutParams params = new ViewGroup.LayoutParams(eachWidth,
                    ViewGroup.LayoutParams.MATCH_PARENT);
            //给RadioButton设置宽度和高度,通过params设置
            rbb.setLayoutParams(params);
            //把我们动态创建
            rg.addView(rbb);
            radioButtons[i] = rbb;
        }
        //设置默认选中第一个
        radioButtons[0].setChecked(true);
        //radioGroup中点击radiobutton的效果
        rg.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {
                Toast.makeText(mActivity, checkedId + "55", Toast.LENGTH_SHORT).show();
                for (int i = 0; i < rg.getChildCount(); i++) {
                    if (radioButtons[i].getId() == checkedId) {
                        vp.setCurrentItem(i);
                    }
                }
            }
        });
    }

    //适配器
    private class VpAdapter extends FragmentPagerAdapter {

        public VpAdapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public android.support.v4.app.Fragment getItem(int position) {
            return fragments.get(position);
        }

        @Override
        public int getCount() {
            return fragments.size();
        }
    }
}



因为代码中是动态添加radiobutton,所以自己定义drawable来显示radiobutton的样式,下面是drawable的代码

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" >
    <layer-list>
        <item android:top="38dp">
            <shape>
                <solid android:color="#00ff00"></solid>
            </shape>
        </item>
    </layer-list>
</item>
    <item android:state_checked="false" android:drawable="@color/transparent"></item>
</selector>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值