美文网首页
RadioGroup的setOnCheckedChangeLis

RadioGroup的setOnCheckedChangeLis

作者: 苍蝇的梦 | 来源:发表于2016-11-08 16:07 被阅读544次

    2016-11-8 遇到的一点小问题

    收入界面需要用到RadioGroup来切换Viewpager的Item显示,Viewpager滑动时也需要切换RadioGroup的选中;效果如图:

    收入详情

    内容不多,懒得用Fragment和FragmentPagerAdapter,直接用的View和PagerAdapter。

    PagerAdapter mAdapter =newPagerAdapter(){

    @Override

    public intgetCount() {

    returnradioId.length;

    }

    @Override

    public booleanisViewFromObject(View paramView, Object paramObject) {

    returnparamView == paramObject;

    }

    @Override

    public voiddestroyItem(ViewGroup container,intposition, Object object) {container.removeView((View) object);

    }

    @Override

    publicObject instantiateItem(ViewGroup container,intposition) {

    View view = LayoutInflater.from(context).inflate(R.layout.list_income,null);

    TextView textName = (TextView) view.findViewById(R.id.name);

    textName.setText(pageName[position]+":¥560.00");

    container.addView(view);

    returnview;

    }

    };

    然后在mPager.addOnPageChangeListener的onPageSelected(intposition)方法里来设置RadioGroup中的RadioButton的选中切换

    之前用的是mRadio.check(radioId[position]);方法,

    发现RadioGroup的setOnCheckedChangeListener里的onCheckedChanged(RadioGroup group,intcheckedId)会被调用三次所以只好改成

    ((RadioButton)mRadio.getChildAt(position)).setChecked(true);

    这样ViewPager滑动结束时就只调用一次onCheckedChanged;

    在RadioGroupon的CheckedChanged设置mPager.setCurrentItem(index);会多次调用,因此只好加了个变量 booleanis PageChange。

    好了,这边贴一下代码,以后再使用就直接拿。

    private static final int[]radioId= {R.id.radio0,R.id.radio1,R.id.radio2,R.id.radio3};//radioButton的id

    private booleanisPageChange;//防止onPageSelected与onCheckedChanged冲突

    finalRadioGroup mRadio = (RadioGroup) findViewById(R.id.radio);

    finalViewPager mPager = (ViewPager) findViewById(R.id.pager);

    mRadio.setOnCheckedChangeListener(newRadioGroup.OnCheckedChangeListener() {

    @Override

    public voidonCheckedChanged(RadioGroup group,intcheckedId) {

    if(isPageChange){

    isPageChange=false;

    return;

    }

    isPageChange=true;

    intindex = Arrays.binarySearch(radioId, checkedId);

    mPager.setCurrentItem(index);

    }

    });

    mPager.addOnPageChangeListener(newViewPager.OnPageChangeListener() {

    @Override

    public voidonPageScrolled(intposition,floatpositionOffset,intpositionOffsetPixels) {}

    @Override

    public voidonPageSelected(intposition) {

    if(isPageChange){

    isPageChange=false;

    return;

    }

    isPageChange=true;

    ((RadioButton)mRadio.getChildAt(position)).setChecked(true);

    }

    @Override

    public voidonPageScrollStateChanged(intstate) {}

    });

    PagerAdapter mAdapter =newPagerAdapter(){

    @Override

    public intgetCount() {

    returnradioId.length;

    }

    @Override

    public booleanisViewFromObject(View paramView, Object paramObject) {

    returnparamView == paramObject;

    }

    @Override

    public voiddestroyItem(ViewGroup container,intposition, Object object) {container.removeView((View) object);

    }

    @Override

    publicObject instantiateItem(ViewGroup container,intposition) {

    View view = LayoutInflater.from(context).inflate(R.layout.list_income,null);

    TextView textName = (TextView) view.findViewById(R.id.name);

    textName.setText(pageName[position]+":¥560.00");

    container.addView(view);

    returnview;

    }

    };

    mPager.setOffscreenPageLimit(3);

    mPager.setAdapter(mAdapter);

    之前都是发的51CTO博客,换这边试试

    二分法搜索的问题:http://qq445493481.blog.51cto.com/9545543/1791789

    相关文章

      网友评论

          本文标题:RadioGroup的setOnCheckedChangeLis

          本文链接:https://www.haomeiwen.com/subject/uzqvdttx.html