Android 返回(onClickBack)到获取可序列化额外数据的活动

Android 返回(onClickBack)到获取可序列化额外数据的活动,android,android-intent,android-activity,Android,Android Intent,Android Activity,我已经尝试了各种各样的解决方案,似乎无法找到在不使用廉价黑客(如将数据保存到SharedReference等)的情况下实现此特定问题的最佳方法 我有一项活动需要来自intent extras的数据: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_view_probl

我已经尝试了各种各样的解决方案,似乎无法找到在不使用廉价黑客(如将数据保存到SharedReference等)的情况下实现此特定问题的最佳方法

我有一项活动需要来自intent extras的数据:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_view_problem_set);
    ButterKnife.bind(this);

    this.problemSet = (ProblemSet) getIntent().getSerializableExtra("problemSet");
    ...
}
当用户单击问题集中的特定问题时,我会生成一个新的活动,它只查看与问题集中特定问题相关联的数据。注意,这只是数据的一个视图(不需要为result启动活动,因为没有返回任何内容)

下面是从第一个创建活动开始,转到第二个创建活动,然后返回第二个创建活动的日志

03-30 13:23:50.021 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onCreate savedInstanceState=null
03-30 13:23:50.026 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onResume
03-30 13:23:54.324 2540-2540/io.gradem.gradem D/view_ps_activity: clicked on problem 
03-30 13:23:54.337 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onPause
03-30 13:23:54.354 2540-2540/io.gradem.gradem D/activity_feedback: ProblemFeedbackActivity.onCreate savedInstanceState=null
..... some over behavior before returning to previous activity ....
03-30 13:30:12.377 7266-7266/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onSaveInstanceState savedInstanceState=Bundle[{}]
03-30 13:23:58.861 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onCreate savedInstanceState=null

savedInstanceState实际上应该解决这个问题,但是使用单例类似乎更容易。

我继续实现了它,但仍然看到奇怪的行为。看我的编辑。使用一个单例类,它更容易。只是查了一下。。。太棒了。谢谢你的评论。事实上,这些额外的东西并没有被很明显地保留下来,这是某种设计缺陷。谢谢你的帮助。
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    Log.d(TAG, "ViewProblemSetActivity.onSaveInstanceState savedInstanceState=" + savedInstanceState);
    super.onSaveInstanceState(savedInstanceState);
    savedInstanceState.putSerializable("problemSet", problemSet);
}

@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
    Log.d(TAG, "ViewProblemSetActivity.onRestoreInstanceState savedInstanceState=" + savedInstanceState);
    super.onRestoreInstanceState(savedInstanceState);
    this.problemSet = (ProblemSet)savedInstanceState.getSerializable("problemSet");
}

@Override
protected void onResume() {
    Log.d(TAG, "ViewProblemSetActivity.onResume");
    super.onResume();
}

@Override
protected void onPause() {
    Log.d(TAG, "ViewProblemSetActivity.onPause");
    super.onPause();
}
03-30 13:23:50.021 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onCreate savedInstanceState=null
03-30 13:23:50.026 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onResume
03-30 13:23:54.324 2540-2540/io.gradem.gradem D/view_ps_activity: clicked on problem 
03-30 13:23:54.337 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onPause
03-30 13:23:54.354 2540-2540/io.gradem.gradem D/activity_feedback: ProblemFeedbackActivity.onCreate savedInstanceState=null
..... some over behavior before returning to previous activity ....
03-30 13:30:12.377 7266-7266/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onSaveInstanceState savedInstanceState=Bundle[{}]
03-30 13:23:58.861 2540-2540/io.gradem.gradem D/view_ps_activity: ViewProblemSetActivity.onCreate savedInstanceState=null