Android片段转换发生在应用程序进入后台之后



我有一个注册活动,其中有多个片段(分步注册流程)。。

在活动中,我有一个updateRegistrationStage()方法,用于处理片段转换。。问题是:1) 我点击继续按钮,向服务器提交一些数据,等待响应。。2) 在我得到任何回应之前,我按下主页按钮,应用程序进入后台。。3) 然后,我得到了回应,应该跳到下一个片段。。。此时,我呼叫:

transaction = fm.beginTransaction();
transaction.add(R.id.registration_container, newFragment, newFragment.toString());
transaction.commit();

应用程序崩溃。。投掷

java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

如果我把最后一行改成

transaction.commitAllowingStateLoss();

它会说

java.lang.IllegalStateException: Activity has been destroyed

我认为可以设置一个标志,例如isActivityAlive,以确保在活动仍然存在时提交事务。。。但是真难看。当活动不再活动时,有没有更好的方法来取消碎片事务?

您必须将注册状态与UI分开存储,并使用侦听器更新UI。使用活动回调onStart更新状态并初始化所有侦听器,使用onStop处理侦听器

更新:我为这个解决方案写了一个简单的存根,但我没有尝试编译。例如,它只是

//UI
public class RCMActivity extends Activity {
    RegistrationManager registrationManager = RegistrationManager.getInstance();
    OnRegistrationListener listener = new OnRegistrationListener() {
        public void onComplete(State state) {
            //change UI here
        }
        public void onFailed() {}
    }
    @Override
    protected void onStart() {
        super.onStart();
        registrationManager.setListener(listener);
    }
    @Override
    protected void onStop() {
        super.onStart();
        registrationManager.setListener(null);
    }
}
//state in separate file
public class RegistrationManager {
    enum State {IDLE, FIRST_STEP, SECOND_STEP, THIRD_STEP};
    public interface OnRegistrationListener {
        void onComplete(State state);
        void onFailded();
    }
    private OnRegistrationListener listener;
    private State state = IDLE;
    public void setOnRegistrationListener(OnRegistrationListener l)
    {
        listener = l;
    }
    public static RegistrationManager getInstance() {//for example it's singleton}
}

相关内容

最新更新