小编nem*_*zis的帖子

如何从FragmentManager中删除以前的堆栈条目?

我有一个活动,我使用以下方法切换片段:

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中删除以前的片段而不弹出当前片段?

android android-fragments back-stack fragmentmanager

14
推荐指数
1
解决办法
9797
查看次数

还原视图当解组父视图SavedState时,SavedState会抛出ClassNotFoundException

我有2个班级ParentClassChildClass:

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)

android savestate parcel parcelable

6
推荐指数
1
解决办法
569
查看次数

如何从另一个任务调用android flavor gradle任务

在我的项目中,我有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调用包含在单独的任务中.

android gradle

2
推荐指数
1
解决办法
829
查看次数