1

Ich habe einen ViewPager mit wischbaren Fragmenten und auch eine Radiogruppe, die anzeigt, welche Ansicht ausgewählt ist. Wenn ich die Anwendung starte, wird der erste Radiobutton nicht ausgewählt, er wird nur ausgewählt, wenn ich eine andere Ansicht wische und zurückkomme. Ich bin ein Anfänger, also bitte teilen Sie Ihr Wissen. Hier ist mein Code:Verwenden von ViewPager mit RadioGroup zum Wechseln zwischen Fragmenten

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

    } 
} 

Antwort

1

rufen Sie einfach diese

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

nach

mViewPager.setCurrentItem(0); 

als listner nicht in Start Prüfzeitpunkte und Sie es manuell einstellen, nachdem Adapter

hoffen viewpager Einstellung wird es funktionieren für dich !! :)

1

Das ist ein ziemlich häufiges Problem mit ViewPager. onPageSelected wird nicht beim Start aufgerufen, also würde ich einfach anrufen:

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

In Ihrer initUi() Methode.