Android 使用RadioGroup切换ViewPager视图
我正在尝试使用Android 使用RadioGroup切换ViewPager视图,android,android-fragments,android-viewpager,android-radiogroup,Android,Android Fragments,Android Viewpager,Android Radiogroup,我正在尝试使用RadioGroup来处理我的ViewPager屏幕切换。但是,ViewPager不会滚动到指定的位置。我很困惑,不管是不是我做的不对。下面是我的代码 寻呼机侦听器 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, i
RadioGroup
来处理我的ViewPager
屏幕切换。但是,ViewPager
不会滚动到指定的位置。我很困惑,不管是不是我做的不对。下面是我的代码
寻呼机侦听器
pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
switch (position) {
case 0:
switcherGroup.check(R.id.view1);
break;
case 1:
switcherGroup.check(R.id.view2);
break;
case 2:
switcherGroup.check(R.id.view3);
break;
case 3:
switcherGroup.check(R.id.view4);
break;
case 4:
switcherGroup.check(R.id.view5);
break;
default:
break;
}
}
@Override
public void onPageSelected(int position) {
//
}
@Override
public void onPageScrollStateChanged(int state) {
//
}
});
以上方法很好。但是,当我添加RadioGroup CheckListener时,这就是问题所在
RagioGroup我在pager时添加了if
检查。setCurrentItem(value,true)
持续显示屏幕只是随机切换屏幕。好像它根本没有按照指示去做
private final RadioGroup.OnCheckedChangeListener onCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.loanView:
if (pager.getCurrentItem() != 0) {
pager.setCurrentItem(0, true);
}
break;
case R.id.loanProfileView:
if (pager.getCurrentItem() != 1) {
pager.setCurrentItem(1, true);
}
break;
case R.id.loanEmployeeView:
if (pager.getCurrentItem() != 2) {
pager.setCurrentItem(2, true);
}
break;
case R.id.loanHouseView:
if (pager.getCurrentItem() != 3) {
pager.setCurrentItem(3, true);
}
break;
case R.id.loanIncomeView:
if (pager.getCurrentItem() != 4) {
pager.setCurrentItem(4, true);
}
break;
default:
break;
}
}
};
我的寻呼机适配器
公共类PagerAdapter扩展了FragmentPagerAdapter{
public PagersAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
Fragment fragment = new Frag1();
switch (position) {
case 0:
fragment = new Frag1();
break;
case 1:
fragment = new Frag2();
break;
case 2:
fragment = new Frag3();
break;
case 3:
fragment = new Frag4();
break;
case 4:
fragment = new Frag5();
}
return fragment;
}
@Override
public int getCount() {
return 5;
}
任何帮助都将不胜感激。谢谢你有两个bug
ViewPager.OnPageChangeListener
您应该使用
onPageSelected()
RadioGroup.OnCheckedChangeListener
listener,反之亦然onPageSelected()
private final ViewPager.SimpleOnPageChangeListener simpleOnPageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
// Logic
}
};
并取消每个侦听器上的另一个侦听器的设置,并在函数结束时将其重新分配,以避免触发侦听器并导致堆栈溢出
private final RadioGroup.OnCheckedChangeListener onCheckedChangeListener = new RadioGroup.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
pager.removeOnPageChangeListener(simpleOnPageChangeListener);
// Logic
pager.addOnPageChangeListener(simpleOnPageChangeListener);
}
};
private final ViewPager.SimpleOnPageChangeListener simpleOnPageChangeListener = new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
radioGroup.setOnCheckedChangeListener(null);
// Logic
radioGroup.setOnCheckedChangeListener(onCheckedChangeListener);
}
};
如果你得到的是随机页面,我猜问题出在你的PagerAdapter代码中。@Raanan我已经编辑了我的代码并添加了适配器。你能看一下吗?解决了,没有它我们该怎么办。:)好吧,你只是快速跟踪我今天的工作。介意击掌吗?