使用带有radiogroup的viewpager在片段之间切换
Using viewpager with radiogroup to switch between fragments
我有一个带有可滑动片段的 viewpager,还有一个显示选择了哪个视图的单选框。当我启动应用程序时,第一个单选按钮未被选中,只有在我滑动另一个视图并返回时才会被选中。我是初学者,所以请分享您的知识。这是我的代码:
Viewpager 适配器:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public static int int_items = 3;
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new WelcomeOneFragment();
case 1:
return new WelcomeTwoFragment();
case 2:
return new WelcomeThreeFragment();
}
return null;
}
@Override
public int getCount() {
return int_items;
}
带有广播组的片段:
public class TabFragment extends BaseFragment implements ViewPager.OnPageChangeListener, View.OnClickListener {
public static ViewPager mViewPager;
private Button mButtonMassage;
private RadioGroup mRadioGroup;
public static TabFragment newInstance() {
return new TabFragment();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tab, container, false);
initUi(rootView);
return rootView;
}
@Override
public void initUi(View rootView) {
mRadioGroup = (RadioGroup) rootView.findViewById(R.id.radio_group);
mViewPager = (ViewPager) rootView.findViewById(R.id.view_pager);
mButtonMassage = (Button) rootView.findViewById(R.id.buttonMassage);
initListeners();
}
@Override
public void initListeners() {
mButtonMassage.setOnClickListener(this);
mViewPager.addOnPageChangeListener(this);
initData();
}
@Override
public void initData() {
mViewPager.setAdapter(new ViewPagerAdapter(getChildFragmentManager()));
mViewPager.setCurrentItem(0);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonMassage:
Intent i = new Intent(getActivity(), MassageActivity.class);
startActivity(i);
break;
default:
break;
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mRadioGroup.check(mRadioGroup.getChildAt(position).getId());
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
这是 ViewPager
的一个很常见的问题。 onPageSelected
没有在开始时调用,所以我只调用:
mRadioGroup.check(mRadioGroup.getChildAt(0).getId());
在你的initUi()
方法中。
就叫这个
mRadioGroup.check(mRadioGroup.getChildAt(0).getId());
在
之后
mViewPager.setCurrentItem(0);
因为监听器不会在启动时调用,您必须在将适配器设置为 viewpager 后手动设置它
希望它对你有用!! :)
我有一个带有可滑动片段的 viewpager,还有一个显示选择了哪个视图的单选框。当我启动应用程序时,第一个单选按钮未被选中,只有在我滑动另一个视图并返回时才会被选中。我是初学者,所以请分享您的知识。这是我的代码:
Viewpager 适配器:
public class ViewPagerAdapter extends FragmentPagerAdapter {
public static int int_items = 3;
public ViewPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0:
return new WelcomeOneFragment();
case 1:
return new WelcomeTwoFragment();
case 2:
return new WelcomeThreeFragment();
}
return null;
}
@Override
public int getCount() {
return int_items;
}
带有广播组的片段:
public class TabFragment extends BaseFragment implements ViewPager.OnPageChangeListener, View.OnClickListener {
public static ViewPager mViewPager;
private Button mButtonMassage;
private RadioGroup mRadioGroup;
public static TabFragment newInstance() {
return new TabFragment();
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_tab, container, false);
initUi(rootView);
return rootView;
}
@Override
public void initUi(View rootView) {
mRadioGroup = (RadioGroup) rootView.findViewById(R.id.radio_group);
mViewPager = (ViewPager) rootView.findViewById(R.id.view_pager);
mButtonMassage = (Button) rootView.findViewById(R.id.buttonMassage);
initListeners();
}
@Override
public void initListeners() {
mButtonMassage.setOnClickListener(this);
mViewPager.addOnPageChangeListener(this);
initData();
}
@Override
public void initData() {
mViewPager.setAdapter(new ViewPagerAdapter(getChildFragmentManager()));
mViewPager.setCurrentItem(0);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonMassage:
Intent i = new Intent(getActivity(), MassageActivity.class);
startActivity(i);
break;
default:
break;
}
}
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
mRadioGroup.check(mRadioGroup.getChildAt(position).getId());
}
@Override
public void onPageScrollStateChanged(int state) {
}
}
这是 ViewPager
的一个很常见的问题。 onPageSelected
没有在开始时调用,所以我只调用:
mRadioGroup.check(mRadioGroup.getChildAt(0).getId());
在你的initUi()
方法中。
就叫这个
mRadioGroup.check(mRadioGroup.getChildAt(0).getId());
在
之后 mViewPager.setCurrentItem(0);
因为监听器不会在启动时调用,您必须在将适配器设置为 viewpager 后手动设置它
希望它对你有用!! :)