我有以下活动A,B,C的情况: A-> B-> C->一种
在最后一步(C-> A)中,我想覆盖C的onBackPressed,以便它重新启动活动A(不重新创建它)。我尝试了下面的代码,但仍然调用了A的onCreate()。我应该添加哪个标志?
public void onBackPressed() {
Intent intent=new Intent(C.this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
答案 0 :(得分:1)
这是刷新活动的最佳方式:
public void refresh() {
Intent intent = getIntent();
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
答案 1 :(得分:0)
OnCreate将称为,这是正确行为,以下来自Google documentation:
在先前销毁活动后重新创建活动时,您可以从系统通过活动的Bundle中恢复已保存的状态。 onCreate()和onRestoreInstanceState()回调方法都接收包含实例状态信息的相同Bundle。
因为无论系统是创建活动的新实例还是重新创建前一个实例,都会调用onCreate()方法,因此在尝试读取之前必须检查状态Bundle是否为null。如果它为null,则系统正在创建活动的新实例,而不是恢复之前被销毁的实例。
但是如果你正确处理它并不重要,例如:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
答案 2 :(得分:0)
public void onBackPressed() {
Intent intent=new Intent(C.this, A.class);
// remove below Flag and while going from A dont call finish();
//intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
}
答案 3 :(得分:0)
所以你想确保, A 活动处于与切换到活动 B 之前相同的状态,对吗?
您是否尝试过使用 onSaveInstanceState() / onRestoreInstanceState()(分别是 onCreate(Bundle savedInstanceState))回调,如下所述:{ {3}}? 示例:https://developer.android.com/training/basics/activity-lifecycle/recreating.html
我不确定你想要的方式是否可行。通常最好让Android处理生命周期本身。只要系统感觉破坏您的活动,只需保存重要的东西 - 这样您就可以再次使用上一个状态重新创建它......
修改强> 很久以前,我上次搞乱了多项活动。您是否考虑过使用片段而不是多项活动?一旦我得到了Fragments的概念,我开始只使用一个父Activity并替换Fragments。所以你所有的重物和#34;可以在父活动中实例化一次,并由需要它的片段访问。这可能是一个替代解决方案,这是恕我直言,值得考虑。
答案 4 :(得分:-1)
我喜欢Stanojkovic答案,要保存数据,可以使用意图传递它。
public void refresh() {
Intent intent = getIntent();
intent.putExtra("extra_id",details);
overridePendingTransition(0, 0);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
finish();
overridePendingTransition(0, 0);
startActivity(intent);
}
并将其放入onCreate
details=getIntent().getStringExtra("extra_id")