先看效果图,很多应用中都有
点击下面四个按钮,切换不同的fragment,同时第一个fragment里面又嵌套了一个ViewPager,实现了两个fragment的切换。
代码实现:
public class MainActivity extends FragmentActivity implements
OnCheckedChangeListener {
private RadioGroup rg_home;
private RadioButton rb_home;
private Fragment content;
private FragmentTransaction transaction;
HomeFragment homeFragment;
FindFragment findFragment;
OtherFragment otherFragment;
MineFragment mineFragment;
private int currentIndex = 0;
private boolean isRecycle = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rg_home = (RadioGroup) findViewById(R.id.rb_group);
rb_home = (RadioButton) findViewById(R.id.rb_home);
rg_home.setOnCheckedChangeListener(this);
content = new HomeFragment();// 默认创建HomeFragment
transaction = getSupportFragmentManager().beginTransaction();
rb_home.setChecked(true);// 选中第一个按钮
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putBoolean("isRecycle", true);// 当Activity重建的时候回执行此方法
outState.putInt("currentIndex", currentIndex);// 保存当前选中的位置
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
isRecycle = savedInstanceState.getBoolean("isRecycle");
currentIndex = savedInstanceState.getInt("currentIndex");
}
@Override
protected void onResume() {
super.onResume();
if (isRecycle) {
((RadioButton) (rg_home.getChildAt(currentIndex))).setChecked(true);
}
}
@Override
public void onCheckedChanged(RadioGroup group, int checkedId) {
switch (checkedId) {
case R.id.rb_home:
currentIndex = 0;
if (homeFragment == null) {
homeFragment = new HomeFragment();
}
switchFragment(content, homeFragment);
break;
case R.id.rb_other:
currentIndex = 1;
if (otherFragment == null) {
otherFragment = new OtherFragment();
}
switchFragment(content, otherFragment);
break;
case R.id.rb_find:
currentIndex = 2;
if (findFragment == null) {
findFragment = new FindFragment();
}
switchFragment(content, findFragment);
break;
case R.id.rb_mine:
currentIndex = 3;
if (mineFragment == null) {
mineFragment = new MineFragment();
}
switchFragment(content, mineFragment);
break;
}
}
/**
* 切换Fragment,避免每次创建新的实例
*
* @param from
* @param to
*/
public void switchFragment(Fragment from, Fragment to) {
if (content != to) {
content = to;
FragmentTransaction transaction = getSupportFragmentManager()
.beginTransaction();
if (!to.isAdded()) {
transaction.hide(from).add(R.id.fl_main, to).commit();
} else {
// Toast.makeText(this,"直接显示",Toast.LENGTH_SHORT).show();
transaction.hide(from).show(to).commit();
}
}
}
}
public class HomeFragment extends Fragment{
private ViewPager pager;
private List<Fragment> list;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home, null);
pager = (ViewPager) view.findViewById(R.id.pager);
list = new ArrayList<Fragment>();
list.add(new FragmentOne());
list.add(new FragmentTwo());
pager.setAdapter(new MyAdapter(getFragmentManager(), list));
return view;
}
class MyAdapter extends FragmentPagerAdapter{
private List<Fragment> list;
public MyAdapter(FragmentManager fm,List<Fragment> list) {
super(fm);
this.list = list;
}
@Override
public Fragment getItem(int arg0) {
return list.get(arg0);
}
@Override
public int getCount() {
return list.size();
}
}
}