节选自:关于Fragment的一些使用心得-跳转和返回栈实战浅析
先说fragment之间的跳转吧!
我的项目中首先是一个activity,在该活动中添加了一个fragmentA,然后需要从fragmentA跳转到fragmentB,那么我的实现方法如下:
// 设置标题右侧文字及单击事件监听
activity.setTitleRight("添加", new View.OnClickListener() {
@Override
public void onClick(View v) {
AddPlanFragment fragment = new AddPlanFragment();// 创建AddPlanFragment对象
showFragment(PlanListFragment.this, fragment);// 跳转添加计划界面
}
});
/**
* 碎片之间的跳转
*
* @param fragment_current 当前fragment
* @param fragment_next 跳转后显示的fragment
*/
private void showFragment(Fragment fragment_current, Fragment fragment_next) {
// 获取FragmentTransaction对象
FragmentTransaction transaction = ((WorkPlanActivity) context)
.getSupportFragmentManager().beginTransaction();
if (fragment_next.isAdded()) {
// 如果fragment_next已经添加过了,那么直接隐藏fragment_current,显示fragment_next
transaction
.hide(fragment_current)
.show(fragment_next)
.addToBackStack(null)// 加入返回栈,点击回退键会返回上一个fragment
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)// 设置转换动画
.commitAllowingStateLoss();// 提交事务
} else {
// 如果fragment_next还没有添加,那么用add方法添加该碎片
transaction
.hide(fragment_current)// 隐藏fragment_current
.add(R.id.frameLayout_workPlan, fragment_next)
.addToBackStack(null)
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.commitAllowingStateLoss();
}
}
上面的代码简单来说就是fragmentA中顶部右侧的标题添加单击事件监听,用以跳转到fragmentB。方法中我加了关键的注释,大家应该能理解。
- 虽说这是一个实现方法,但是难免嵌套多层fragment的时候会出现重影问题(有小概率会出现),我这里有几个比较好的链接给大家去参考参考,然后建议不要嵌套多层:
下面就来说说返回栈吧! 继续阅读关于Fragment的一些使用心得-跳转和返回栈实战浅析