1:初始化视图,默认开启第一个fragment
private void initView() {
transaction = getSupportFragmentManager().beginTransaction();
Fragment fragment = getInstanceByIndex(FIRST_FRAGMENT_TRANSACTION);
transaction.add(R.id.fl_fragment, fragment);
transaction.commit();
}
2:onclick事件进行fragment切换
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn_firstFragment:
switchContent(getInstanceByIndex(FIRST_FRAGMENT_TRANSACTION));
break;
case R.id.btn_secondFragment:
switchContent(getInstanceByIndex(SECOND_FRAGMENT_TRANSACTION));
break;
default:
break;
}
}
主要看下switchContent的切换方式
public void switchContent(Fragment to) {
transaction= getSupportFragmentManager()
.beginTransaction();
if (!to.isAdded()) { // 先判断是否被add过
transaction.hide(getVisibleFragment()).add(R.id.fl_fragment, to); // 隐藏当前的fragment,add下一个到Activity中
} else {
transaction.hide(getVisibleFragment()).show(to); // 隐藏当前的fragment,显示下一个
}
// transaction.addToBackStack(to.getClass().getSimpleName());
transaction.commit();
}
public Fragment getVisibleFragment() {
FragmentManager fragmentManager = getSupportFragmentManager();
List<Fragment> fragments = fragmentManager.getFragments();
for (Fragment fragment : fragments) {
if (fragment != null && fragment.isVisible())
return fragment;
}
return new Fragment();
}
并附上getInstanceByIndex方法实现
private Fragment getInstanceByIndex(int stringExtra) {
if (stringExtra == FIRST_FRAGMENT_TRANSACTION) {
if (firstFragment == null) {
firstFragment = new FirstFragment();
}
return firstFragment;
}
if (stringExtra == SECOND_FRAGMENT_TRANSACTION) {
if (secondFragment == null) {
secondFragment = new SecondFragment();
}
return secondFragment;
}
return new Fragment();
}
进堆栈
transaction.addToBackStack(to.getClass().getSimpleName());
弹出堆栈
public void popBackStack() {
getSupportFragmentManager().popBackStack();
}