【问题标题】:Class's object initialized in Parent activity re-initialized in child activity在父活动中初始化的类的对象在子活动中重新初始化
【发布时间】:2014-06-26 17:09:57
【问题描述】:

我有一个在活动(父活动)中初始化的对象,现在一个扩展父活动的子活动在执行子活动的 onCreate 时重新初始化该对象。

细分:
1. 在父类的onCreate 一个类的对象在一个条件下被初始化:

if(obj == null){
  Init();
}

2。一个子活动开始(扩展父活动)此时由于super.onCreate(),父母的 onCreate 也被调用,并且不知何故它完全忽略了父母在 #1 中运行 init() 的条件。

谁能告诉我如何才能摆脱这种情况?

更新:任何人..? :(

【问题讨论】:

  • 请附上完整的代码,不要只附上没用的sn-ps。
  • @Smutje 这是一个复杂的代码并遵循 MVC 架构。我可以共享项目吗?这是一个只有 2xactivity 和 1x 控制器的小项目
  • 不,但至少需要创建并导致问题的两个类来分析您的问题 - 可能将它们限制在构造函数和创建发生的地方。
  • @Smutje 这是parent activity,这是child activity(扩展父活动)
  • @blackbelt 是的,也请看 ^

标签: java android object inheritance parent-child


【解决方案1】:

因此,首先,controlleronCreate() 中将始终为空。您在子活动中看到 controller 为 null 的原因是您正在记录它的值 before 您正在调用 super.onCreate() (它调用父级的 onCreate() 并初始化控制器)。

【讨论】:

  • 请看我上面的comment 正是我的观点。我不希望控制器的 obj 被重新初始化。我不明白的是(除了将控制器的 obj 记录在 child :p 之外)为什么父活动的 onCreate 会重新初始化 obj? :( 我在那里有一个适当的条件,它之前已经被初始化了
  • 它什么时候被初始化过?它仅在父 Activity 的onCreate() 中初始化。启动该 Activity 的子类不会同时启动父 Activity 和子 Activity,它只会启动子 Activity。当活动创建onCreate() 被调用)时,您将初始化您的控制器变量。在销毁您的活动之前,绝不会调用两次 onCreate()
  • 大声笑我猜你误会了:D 我的意思是:当孩子的onCreate 被称为父母的onCreate 时(由于super.onCreate() 行)并且在那个时候(在父母的onCreate内)它忽略了初始化/不初始化控制器的obj的条件,它只是重新初始化了obj
  • 不,它没有。它进入if (controller == null) 分支,因为controlleronCreate() 中将始终为空。
  • 那么这是否意味着首先初始化 obj 的父活动现在无法访问控制器的 obj(在子的 onCreate 执行父的 onCreate 时)?那么,如何确保它不会重新初始化,或者我是否可以使用引用的 obj 从子项重新初始化控制器?
猜你喜欢
  • 1970-01-01
  • 2017-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多