实现Frament的动态切换有两种方式
1.切换的时候重新创建Fragment
public void changeFragment(final int id){
Fragment currentFragment=new PopularFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.content_frame, currentFragment).commit();
}
实例化Fragment数组
Fragment[] mFragments = new Fragment[3]
mFragments[0] = PopularFragment.newInstance(Category.popular);
<span style="font-family: Arial, Helvetica, sans-serif;">mFragments[1] = PopularFragment.newInstance(Category.everyone);</span>
mFragments[2] = PopularFragment.newInstance(Category.debuts);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
for (Fragment fragment : mFragments) {
ft.add(R.id.content_frame, fragment);
ft.hide(fragment);
}
ft.commit();
切换方法
private void showOrHideFragments(final int id) {
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
// define replace fragment animation
ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out,
android.R.anim.fade_in, android.R.anim.fade_out);
// show or hide fragment
for (int i = 0; i < mFragments.length; i++) {
Fragment fragment = mFragments[i];
if (fragment != null) {
if (id != i) {
ft.hide(fragment);
} else {
ft.show(fragment);
}
}
}
ft.commit();
}
如果遇到Fragment重叠显示的问题,可以这样解决,详见http://typeblog.net/tech/2014/08/22/fix-duplicate-menu.html
/**
* not calling the superclass method doesn't allow the fragment manager to save its state
* 解决Fragment和菜单项重叠显示问题
*/
@Override
protected void onSaveInstanceState(Bundle outState) {
//Empty
}