按主页按钮调用父

时间:2017-08-21 21:31:11

标签: android

我有三项活动MainItemItemDetail

Item已将Main设置为清单

中的Parent
<activity 
  android:name=".Activities.Item"
  android:parentActivityName=".Activities.Main"
/>

ItemDetail已将Item设置为清单

中的Parent
<activity 
  android:name=".Activities.ItemDetail"
  android:parentActivityName=".Activities.Item"
/>

以下是活动流应该看起来像什么

Main > Item > ItemDetail 

ItemItemDetail都来自BaseActivity

public class Item extends BaseActivity { ... }
public class ItemDetail extends BaseActivity { ... }

BaseActivity显示并启用主页按钮

 getSupportActionBar().setHomeButtonEnabled(true);
 getSupportActionBar().setDisplayHomeAsUpEnabled(true);

现在问题是:当从ItemDetail活动按 BACK 按钮时,Item会被带到前台,这是预期的行为,对吧?但是,当从ItemDetail活动按下 HOME 按钮时,会调用Item活动的onDestroyonCreate,表明(显然){{1}在重新创建之前,活动正在被销毁。

我的问题是为什么Item活动被销毁,以及从Item而不是后退按钮按下主页按钮。这对我来说毫无意义。

TL; DR

我的应用程序在按下home时崩溃,因为我希望ItemDetail保留在活动堆栈上并保持状态,但是活动意外地被破坏导致空指针错误。

修改

是的,我已经实现了onSavedInstance状态并正在工作,只是已保存的状态消失了,从Item activity Item调用此行返回true

onCreate

1 个答案:

答案 0 :(得分:2)

您不应该假设任何活动仍然在Backstack上并保持状态。相反,您应该正确实现onSaveInstanceState和onRestoreInstanceState。框架可能会在不是前台的任何时候终止您的Activity。甚至还有一个开发人员选项设置来帮助测试它,一旦它们不再是前景,它将关闭所有活动。我建议您经常使用此模式测试您的应用。