Search code examples
androidandroid-fragmentsandroid-viewpagerandroid-radiogroup

Using viewpager with radiogroup to switch between fragments


I have a viewpager with swipeable fragments and also a radiogroup that shows which view is selected. When I start the application, the first radiobutton is not selected, it is only selected when I swipe another view and get back. I am a beginner, so please share your knowledge. Here's my code:

Viewpager Adapter:

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;
}

Fragment with the radiogroup:

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) {

    }
}

Solution

  • just call this

    mRadioGroup.check(mRadioGroup.getChildAt(0).getId());
    

    after

     mViewPager.setCurrentItem(0);
    

    as listner will not callup in starting and you have to set it for manually after setting adapter to viewpager

    hope it will work for you!! :)