【问题标题】:Why in the world does a button have to be defined after setContentView?为什么必须在 setContentView 之后定义一个按钮?
【发布时间】:2013-02-15 08:07:36
【问题描述】:

所以我只花了 4 个小时试图让我的代码正常工作,我意识到这太愚蠢了。我在 setContentView(blablabla); 之前定义了一个按钮;被称为。为什么这会导致我的应用程序崩溃? Button schoolNameButton = (Button)findViewById(R.id.schoolNameButton); setContentView(myVIew);

【问题讨论】:

  • 因为 setContentView(blablabla) 将初始化该按钮(除其他外)?

标签: android button view android-activity


【解决方案1】:

因为setContentView 实际上是您为当前活动设置 UI 的地方。这样做,系统知道哪些 UI 元素与此 Activity 相关联,并且所有元素都需要在其中初始化 - 在setContentView() 之后。当然,如果你不做这样的事情:

LinearLayout myLayout = new LinearLayout(this);
setContentView(myLayout);

以下是 SDK 中setContentView 的解释:

public void setContentView (int layoutResID)

在 API 级别 1 中添加 从布局资源设置活动内容。 资源将被膨胀,将所有顶级视图添加到 活动。

public void setContentView(查看视图)

将活动内容设置为显式视图。这个视图被放置 直接进入活动的视图层次结构。它本身可以是一个 复杂的视图层次结构。调用此方法时,布局 指定视图的参数被忽略。无论是宽度还是 视图的高度默认设置为 MATCH_PARENT。使用自己的 布局参数,调用 setContentView(android.view.View, android.view.ViewGroup.LayoutParams) 代替。

【讨论】:

    【解决方案2】:

    这是因为系统需要知道它将在哪个活动/布局视图中执行其操作。所以首先我们需要指定布局(设置内容视图)。然后所有元素,如 Buttons、imageViews、TextViews 等之后在那里确定。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-31
      • 2015-08-19
      • 1970-01-01
      相关资源
      最近更新 更多