先上效果图
界面代码就不用贴出来了就是一个RadioGroup+3个RadioButton,底下一个FrameLayout。完事(底部导航栏也可以这样做)
(1)先初始化控件
@BindView(R.id.rad_group) RadioGroup radGroup; @BindView(R.id.rab_1) RadioButton rab1; @BindView(R.id.rab_2) RadioButton rab2; @BindView(R.id.rab_3) RadioButton rab3; @BindView(R.id.fl_contain) FrameLayout flContain; private ShareFragmentOne shareFragmentOne; private ShareFragmentTwo shareFragmentTwo; private ShareFragmentThree shareFragmentThree;
@Override protected void onCreate(Bundle savedInstanceState) { mvpPresenter = createPresenter(); super.onCreate(savedInstanceState); //默认显示第一个,默认的rabutton设置下xml checked=true属性 setSelect(1); radGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { //点击radGroup的监听事件,切换Fragment,这里还可以用For循环去实现。 @Override public void onCheckedChanged(RadioGroup radioGroup, int i) { switch (i) { case R.id.rab_1: setSelect(1);//切换 break; case R.id.rab_2: setSelect(2); break; case R.id.rab_3: setSelect(3); break; } } });
}
public void setSelect(int i)
{
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
hideFragment(ft);//先隐藏所有Fragment
switch (i) { case 1://如果点击的是第一个rab,如果为空先Add,如果不为空直接show, if (shareFragmentOne == null) { shareFragmentOne = new ShareFragmentOne(); ft.add(R.id.fl_contain, shareFragmentOne); } else { ft.show(shareFragmentOne); } break; case 2://如果点击的是第二个rab... if (shareFragmentTwo == null) { shareFragmentTwo = new ShareFragmentTwo(); ft.add(R.id.fl_contain, shareFragmentTwo); } else { ft.show(shareFragmentTwo); } break; case 3: if (shareFragmentThree == null) { shareFragmentThree = new ShareFragmentThree(); ft.add(R.id.fl_contain, shareFragmentThree); } break; ft.commit();//这句话别漏了 }
}
private void hideFragment(FragmentTransaction ft) { if (shareFragmentOne != null) { ft.hide(shareFragmentOne); } if (shareFragmentTwo != null) { ft.hide(shareFragmentTwo); } if (shareFragmentThree != null) { ft.hide(shareFragmentThree); } }