package forezp.com.douyalibrary.utils; import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.widget.RadioButton; import android.widget.RadioGroup; import java.util.List; public class FragmentTabUtils implements RadioGroup.OnCheckedChangeListener { private List<Fragment> fragments; private RadioGroup rgs; private FragmentManager fragmentManager; private int fragmentContentId; private int currentTab; private OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener; public FragmentTabUtils(FragmentManager fragmentManager, List<Fragment> fragments, int fragmentContentId, RadioGroup rgs, OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener) { this.fragments = fragments; this.rgs = rgs; this.fragmentManager = fragmentManager; this.fragmentContentId = fragmentContentId; this.onRgsExtraCheckedChangedListener = onRgsExtraCheckedChangedListener; rgs.setOnCheckedChangeListener(this); ((RadioButton) rgs.getChildAt(0)).setChecked(true); } @Override public void onCheckedChanged(RadioGroup radioGroup, int checkedId) { for (int i = 0; i < rgs.getChildCount(); i++) { if (rgs.getChildAt(i).getId() == checkedId) { Fragment fragment = fragments.get(i); FragmentTransaction ft = obtainFragmentTransaction(i); getCurrentFragment().onStop(); if (fragment.isAdded()) { fragment.onStart(); } else { ft.add(fragmentContentId, fragment, String.valueOf(i)); ft.commit(); } showTab(i); if (null != onRgsExtraCheckedChangedListener) { onRgsExtraCheckedChangedListener.OnRgsExtraCheckedChanged(radioGroup, checkedId, i); } } } } private void showTab(int idx) { for (int i = 0; i < fragments.size(); i++) { Fragment fragment = fragments.get(i); FragmentTransaction ft = obtainFragmentTransaction(idx); if (idx == i) { ft.show(fragment); } else { ft.hide(fragment); } ft.commit(); } currentTab = idx; } private FragmentTransaction obtainFragmentTransaction(int index) { FragmentTransaction ft = fragmentManager.beginTransaction(); return ft; } public int getCurrentTab() { return currentTab; } public Fragment getCurrentFragment() { return fragments.get(currentTab); } public OnRgsExtraCheckedChangedListener getOnRgsExtraCheckedChangedListener() { return onRgsExtraCheckedChangedListener; } public void setOnRgsExtraCheckedChangedListener(OnRgsExtraCheckedChangedListener onRgsExtraCheckedChangedListener) { this.onRgsExtraCheckedChangedListener = onRgsExtraCheckedChangedListener; } public static interface OnRgsExtraCheckedChangedListener { public void OnRgsExtraCheckedChanged(RadioGroup radioGroup, int checkedId, int index); } }