使用带有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 后手动设置它

希望它对你有用!! :)