当前位置: 首页 > 面试题库 >

Android:将活动的onCreate()代码放在哪里?

邹英发
2023-03-14
问题内容

我将所有活动都转换为片段,以便可以在ViewPager中使用它们。

我已经搜索过了,但是找不到满意的答案,所以这就是为什么我在这里问这个问题。

在我的活动中,我已经在该onCreate()方法中编写了一些代码。例如,我调用some
findViewById()以便将一些xml按钮链接到我的Activity。我还使方法中的所有视图在onCreate(),设置OnClickListener()TextView用文本填充和删除Notification时不可见onCreate()

我的问题是:我应将此代码放在片段的什么位置?在onCreate()中?onCreateView()?onActivityCreated()?为什么呢?

提前谢谢了!


问题答案:

尽管Pragnani的答案很接近,但其中几乎没有教育价值。此外,他的第二条陈述还有一个更合适的选择。

我应将此代码放在片段的什么位置?在onCreate()中?onCreateView()?onActivityCreated()?为什么呢?

简短的答案是:要么onCreateView()onActivityCreated()将做。直到才会创建视图层次结构onCreateView(),因此这是该片段生命周期中的最早时间,您可以膨胀视图并附加单击侦听器等。由于onActivityCreated()将始终在之后运行onCreateView(),所以这也是一个合适的位置。onCreate()可以跳过该操作,以利于系统临时分离片段并重新连接它,例如在保留片段时。

Pragnani指出,扩大片段的视图与扩大活动中的视图略有不同是正确的。更具体地说:片段没有定义findViewById()方法,因此您需要在其他对象上调用它。

getActivity().findViewById()您会想要而不是使用 getView().findViewById()
。这样做的原因是,如果您将活动用于视图查找,那么当将多个具有相同视图ID的片段附加到该活动时,您会遇到麻烦。如果您在各个片段的布局中重复使用视图ID,或者显示两个显示不同数据的相同片段,就会出现这种情况。在这两种情况下,都只会返回第一个匹配项,而您确实希望在片段的扩展部分中查找视图。这正是getView()返回的内容,即片段的根视图(您在中返回的onCreateView()),因此适当地限制了查找的范围。



 类似资料:
  • 问题内容: 我想在服务器启动(开发和生产)时执行以下代码行: 放入settings.py它不起作用,因为它需要先加载设置。 将它们放在视图中并从外部访问该视图也不起作用,因为有些中间件正在使用该数据库,并且这些中间件将失败并且不允许我访问该视图。 将它们放在中间件中是可行的,但是每次访问我的应用程序时都会调用它们。一种可能的解决方案可能是创建一个完成所有工作的中间件,然后将其从中间件中删除,因此不

  • 问题内容: 在我通过Admob广告中介添加MoPub的最新版本中,我在崩溃日志中看到了一堆ConcurrentModificationException。所有这些似乎都是本机代码,我使用的是与广告相关的所有最新版本以及与Google / android相关的所有库。有人遇到过吗? 这是直到BaseActivity的第21行的代码: 这就是代码,直到最近的最近70行 问题答案: 就我们而言,我们只会

  • 问题内容: 我了解到Android 具有特定的生命周期,应该重写该生命周期并将其用于初始化,但是构造函数中到底发生了什么?在任何情况下,您也可以/应该重写构造函数,或者永远不要触摸它? 我假设永远不要使用构造函数,因为不会完全清除对的引用(从而妨碍了垃圾收集器),并且为此目的而存在。这样对吗? 问题答案: 我想不出有什么充分的理由在构造函数中做任何事情。您永远不会直接构造活动,因此无法使用它来传递

  • 问题内容: 我有一个包含多个文件的Go包。从Go标准开始,我正在为包中的每个源文件创建一个关联的测试文件。 就我而言,不同的测试使用相同的测试帮助功能。我不希望这些功能出现在软件包源文件中,因为它仅用于测试目的。我也想避免在每个测试文件中复制此代码。 我应该把这些代码放在所有测试源文件之间共享而不是包的一部分中吗? 问题答案: 您只需将其放在任何测试文件中就可以了。使用相同package子句的测试

  • 这是一个由之前的代码片段组合在一起的源程序文件。 千万不要忘了将 freemarker.jar 放到 CLASSPATH 中。 import freemarker.template.*; import java.util.*; import java.io.*; public class Test { public static void main(String[] args) thr

  • 我在这里使用了这段Java代码,当我试图用https下载一个带有谷歌磁盘共享链接的文件时,我得到了一个错误: 我必须把它放在代码的什么地方,如果我以后在Windows PC上运行它怎么办?