gpt4 book ai didi

android - 返回 (onClick Back) 获取额外可序列化的 Activity

转载 作者:行者123 更新时间:2023-11-29 01:21:55 24 4
gpt4 key购买 nike

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

我有一项 Activity 需要来自 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");
...
}

当用户单击问题集中的特定问题时,我会生成一个新 Activity ,它只是查看与问题集中特定问题相关的数据。请注意,这只是一个简单的数据 View (没有必要为结果启动 Activity ,因为没有返回任何内容)。

_problemsList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Problem problem = ViewProblemSetActivity.this.problemSet.getProblems().get(position);
Log.d(TAG, "clicked on problem + " + problem.toString());
Intent problemFeedbackActivity =
new Intent(ViewProblemSetActivity.this, ProblemFeedbackActivity.class);
problemFeedbackActivity.putExtra("problem", problem);
startActivity(problemFeedbackActivity);
}
});

但是,当我单击返回并返回到现有的 onCreate Activity 时,intent extras 为空。在 Android 中处理这种情况的最佳方法是什么?

我已经尝试过解决方案尝试,例如将额外的内容保存到 savedInstanceState,但是当调用 onCreate 时,我的 savedInstanceState 仍然为空:

Losing Intent extras when returning to Activity

将此数据保存在 onPause 方法上是否更有意义?

Saving Android Activity state using Save Instance State

编辑:

我实现了 savedInstanceState 功能,但在返回到上一个 Activity 时似乎仍然有相同的行为(空 Intent extras 和 null savedInstanceState)。我在第一个 Activity 中添加了以下内容:

@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();
}

这是从创建第一个 Activity 开始,转到第二个 Activity ,然后返回到第二个 Activity 的日志。

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 实际上应该可以解决问题,但使用单例类似乎更容易。

关于android - 返回 (onClick Back) 获取额外可序列化的 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36313611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com