Android setContentView()是第一次调用还是最后一次调用?

Android setContentView()是第一次调用还是最后一次调用?,android,android-layout,Android,Android Layout,我最近收到一个关于创建编程视图的问题。为什么在初始化所有视图并设置所有参数后调用setContentView 简单的例子: override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val l = LinearLayout(this) l.orientation = LinearLayout.VERTICAL for (i in 0 un

我最近收到一个关于创建编程视图的问题。为什么在初始化所有视图并设置所有参数后调用setContentView

简单的例子:

    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val l = LinearLayout(this)
    l.orientation = LinearLayout.VERTICAL
    for (i in 0 until 300)
        l.addView(someTextView(i.toString()))
    setContentView(l)
}

fun someTextView(text: String): TextView {
    val t = TextView(this)
    t.text = text
    return t
}
vs


这两者之间有效率上的差别吗?也适用于更复杂的视图

您的代码没有问题。这就是原因。 -setContentView只做表示活动接口的视图 -首先,您通过ActivityContext创建一个linearlayout。然后向其中添加大量视图。之后您说“嗨,活动”,这就是您的视图。第二步,您将linearlayout附加到活动中,然后将视图添加到活动中。这两种情况都是正常的,没有任何问题。 但是

setContentView在现实生活中非常好,因为没有人会做你想做的事情。每个活动,片段。。etc需要一个xml文件来标识它的布局,每个视图都是按设计组织的。之后,他们可以根据id调用它的视图,只需编辑xml文件而不更改大量代码即可组织视图


因此,基本上,setContentView只是一种方法,用于告诉活动哪个视图将成为它的接口。您的代码没有问题。这就是原因。 -setContentView只做表示活动接口的视图 -首先,您通过ActivityContext创建一个linearlayout。然后向其中添加大量视图。之后您说“嗨,活动”,这就是您的视图。第二步,您将linearlayout附加到活动中,然后将视图添加到活动中。这两种情况都是正常的,没有任何问题。 但是

setContentView在现实生活中非常好,因为没有人会做你想做的事情。每个活动,片段。。etc需要一个xml文件来标识它的布局,每个视图都是按设计组织的。之后,他们可以根据id调用它的视图,只需编辑xml文件而不更改大量代码即可组织视图


因此。基本上,setContentView只是一种方法,用于说明活动的接口是哪个视图

为什么不使用RecyclerView,ListView?@EliasFazel我认为这只是示例的一部分,据我所知,OP询问在初始化视图之前或之后调用setContentView是否有区别,按照我的理解,他们生成300只是示例的一部分,为什么不使用RecyclerView、ListView?@EliasFazel我认为这只是示例的一部分,据我所知,OP询问在所有视图初始化之前或之后调用setContentView是否有不同,按照我的理解,他们生成300只是示例的一部分
    override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    val l = LinearLayout(this)
    setContentView(l)
    l.orientation = LinearLayout.VERTICAL
    for (i in 0 until 300)
        l.addView(someTextView(i.toString()))

}

fun someTextView(text: String): TextView {
    val t = TextView(this)
    t.text = text
    return t
}