我有一个活动,我使用以下方法切换片段:
public void setCurrentFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.setCustomAnimations(R.anim.slide_left_right_in, R.anim.slide_left_right_out, R.anim.slide_right_left_in, R.anim.slide_right_left_out);
transaction.replace(R.id.contentFrameLayout, fragment, Integer.toString(fragmentId++));
transaction.addToBackStack(Integer.toString(fragmentId));
transaction.commit();
}
Run Code Online (Sandbox Code Playgroud)
我的导航堆栈看起来像这样:
N-2 - > N-1 - > N.
当某个片段N'打开'时,我想要从后台堆栈中移除前一个(N-1),所以当我按下"后退"时我想要恢复N-2片段.
当我在N片段中调用FragmentManager.popBackStack(..)时,它会删除N和N-1片段.
在切换到N片段之前,我试图在N-1片段中调用popBackStack(..).但是在那种情况下,N-2片段被恢复,并且仅在显示N片段之后.
我的问题是:有没有办法从backstack中删除以前的片段而不弹出当前片段?
我有2个班级ParentClass和ChildClass:
ParentClass 是RelativeLayout的子类,它使用onSaveInstanceState()/ onRestoreInstanceState()使用以下代码保存状态:
@Override
protected Parcelable onSaveInstanceState() {
SavedState savedState = new SavedState(super.onSaveInstanceState());
savedState.someObj = someObj;
savedState.someInt = someInt;
savedState.someEnum = someEnum;
return savedState;
}
@Override
protected void onRestoreInstanceState(Parcelable in) {
if (!(in instanceof SavedState)) {
super.onRestoreInstanceState(in);
return;
}
SavedState savedState = (SavedState) in;
super.onRestoreInstanceState(savedState.getSuperState());
this.someObj = savedState.someObj;
this.someInt = savedState.someInt;
this.someEnum = savedState.someEnum;
}
Run Code Online (Sandbox Code Playgroud)
以下是SavedState代码:
public static class SavedState extends BaseSavedState {
private SomeObj someObj;
private int someInt;
private SomeEnum someEnum;
public …Run Code Online (Sandbox Code Playgroud) 在我的项目中,我有3种产品口味(开发,生产和测试).我最近从Ant切换过,所以也许我仍然有Ant心态,但这正是我想要实现的:
创建自定义任务(让我们称之为"buildAndUpload"),它将调用assembleDevRelease,然后调用另一个任务.
这是我尝试过的:
task myCustomTask {
println "My Custom Task"
}
task buildAndUpload {
tasks.assembleDevRelease.execute()
tasks.myCustomTask.execute()
}
Run Code Online (Sandbox Code Playgroud)
当我调用buildAndUpload任务(gradlew buildAndUpload)时,我得到以下输出:
:buildAndUpload
"My Custom Task"
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,不会调用assembleDevRelease任务.我知道我可以使用doLast闭包,但我真的想让myCustomTask调用包含在单独的任务中.