java - 对 onCreate 方法期间引用布局感到困惑

标签 java android

我对 this 的行为和 onCreate 方法中引用布局有点困惑。

我正在创建一个小应用程序来试验android,它的目的是改变布局的背景颜色。

这是一段困扰我的测试代码,据我所知,它应该可以工作,但没有:

private RelativeLayout layout;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    layout = new RelativeLayout(this);
    layout.setBackgroundColor(Color.RED); // nothing happens
}

但是,如果我这样做,它会起作用:

private RelativeLayout layout;

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    layout = (RelativeLayout)findViewById(R.id.colorLayout);
    layout.setBackgroundColor(Color.RED); // color changes
}

这里有什么区别?

为什么第一个代码不能正常工作?

this不应该指向当前布局吗?

提前谢谢您!

最佳答案

在第一种方式中,您创建了一个新的RelativeLayout,但没有将其添加到您的 View 中。有两种方法可以解决此问题:

第一种方法:

在 onCreate() 之上,声明您的 View :

RelativeLayout layout;

在 onCreate() 中,添加以下内容:

layout = new RelativeLayout(this);
layout.setBackgroundColor(Color.RED);
setContentView(layout);

第二种方式:

在 onCreate() 之上,声明您的 View :

RelativeLayout layout;

在 onCreate() 中,添加以下内容:

RelativeLayout mainLayout = (RelativeLayout) findViewById(R.id.colorLayout);
layout = new RelativeLayout(this);
layout.setBackgroundColor(Color.RED);
mainLayout.addView(layout);

但是如果你这样做,你现在将有两个RelativeLayout。因此,我建议您使用您在问题中通常发布的解决方案。这样更简单,也更好。这个答案仅修复了您第一种不起作用的方法,但您也确实需要学习我写的内容。

希望有帮助。 :)

关于java - 对 onCreate 方法期间引用布局感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32167787/

相关文章:

java - ORMLite id 始终为 null(没有 id 字段)

java - 是否可以编写允许类型的子类型和类型本身的 Java 泛型表达式?

java - HTML 超链接在 Jasper 报告中不可用

android - 组织.gradle.api.tasks.TaskExecutionException : Execution failed for task ':transformDexArchiveWithExternalLibsDexMergerForDebug'

android - 我如何在 Android 中显示此图像?

android - 恢复具有相同 ID 的两个 View 的 fragment

java - HQL限制查询异常

java - C++ 中的 && 与 Java 中的 && 行为相同吗?

java - 如何使用Java在unix上输入文件路径

java - 在自定义 View 中获取上下文?