繁体   English   中英

为一个活动使用多个 XML 布局

[英]Using Multiple XML Layouts for One Activity

我在 2 ** 线上收到NullPointerException ,有人可以向我解释为什么会发生这种情况吗? 我也尝试过使用switch/case语句但没有运气。

String test;

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    **if(test.equals("One")) {**
        setContentView(R.layout.activity_one);
    } else if(test.equals("Two")){
        setContentView(R.layout.activity_two);
    } else {
        setContentView(R.layout.activity_main);
    }

你得到一个NPE因为你的String test从未初始化,所以它实际上是null

在带有 ** 的行上,您试图在null引用上调用方法。

if(test.equals("One")) { // Will generate NPE
    setContentView(R.layout.activity_one);
} else if(test.equals("Two")){ // Will generate NPE
    setContentView(R.layout.activity_two);
} else {
    setContentView(R.layout.activity_main);
}

您必须初始化变量。 作为一个好习惯,您可以随时检查null ,例如:

if (test != null) {
    // do something.
}

就像在其他答案中所说的那样,您可以比较以下文字:

"one".equals(test);

一个建议是不要使用“魔术数字”和“魔术字符串”。 在您的班级上声明这些文字,例如:

private static final String STR_ONE = "One";
private static final String STR_TWO = "Two";

然后,在你的if/else做这样的比较:

if (STR_ONE.equals(test)) {
    setContentView(R.layout.activity_one);
} else if (STR_TWO.equals(test)) {
    setContentView(R.layout.activity_two);  
} else {
    setContentView(R.layout.activity_main); 
}

有关文档此问题的NullPointerException更多信息。

test为 null 并引发 NullPointerException。

您应该初始化该变量。

此外,当您需要检查一些带有常量的字符串以将常量变量放入this对象时会更好,例如更改此:

if(test.equals("One"))

对此:

if("One".equals(test))

这样,即使测试为空,您也是安全的。

您的test变量为null 为了避免对String null检查,在常量值上调用 equals 方法总是一个好主意

if("One".equals(test)) {
    setContentView(R.layout.activity_one);
} else if("Two".equals(test)){
    setContentView(R.layout.activity_two);
} else {
    setContentView(R.layout.activity_main);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM