在代码中创建布局并获取 nullPointerException
create layout in code and get nullPointerException
我用纯代码创建布局。
它奏效了,我决定创建另一个 class 来重用我的布局。
我添加了一个新的 class (Designer.java),以便在其他活动中重复使用我的页脚和页眉。
我将上下文作为参数传递给其他活动。
- rel2MainActivity 有 3 个 children
- relMainActivity 为空
我不明白怎么了。我一定是错过了什么
MainActivity.java
RelativeLayout relMainActivity ;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
Designer design = new Designer();
design.createDesign(relMainActivity, this);
// relMainActivity = null in debug
setContentView(relMainActivity);
// java.lang.NullPointerException
}
Designer.java
RelativeLayout relHeader, relFooter, relContent;
public void createDesign(RelativeLayout rel2MainActivity, Context context) {
rel2MainActivity = new RelativeLayout(context);
// ...
rel2MainActivity.addView(relHeader, 0);
rel2MainActivity.addView(relContent, 1);
rel2MainActivity.addView(relFooter, 2);
// rel2MainActivity has 3 children in debug
}
in createDesign
方法直接使用 relMainActivity
或 RelativeLayout 的 return 实例,并在调用 createDesign
方法后立即将其分配给 onCreate 中的 relMainActivity
.
您在 createDesign()
中添加了 3 个视图,但您没有将该视图传回被调用方。
因此,它将 null 赋给 relMainActivity
解法:
这里是你打电话的时候:
RelativeLayout relHeader, relFooter, relContent;
public RelativeLayout createDesign(RelativeLayout rel2MainActivity, Context context) {
rel2MainActivity = new RelativeLayout(context);
// ...
rel2MainActivity.addView(relHeader, 0);
rel2MainActivity.addView(relContent, 1);
rel2MainActivity.addView(relFooter, 2);
// rel2MainActivity has 3 children in debug
// rel2MainActivity view is local to this scope
// you should return it
return rel2MainActivity;
}
并在 :
获取
RelativeLayout relMainActivity ;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
Designer design = new Designer();
relMainActivity = design.createDesign(relMainActivity, this);
// relMainActivity = null in debug
setContentView(relMainActivity);
}
你的文件变量relMainActivity1
在这行代码
之后保持为空
design.createDesign(relMainActivity, this);
在
中使用之前,您应该更改代码以初始化 relMainActivity1
setContentView(relMainActivity);
即
public RelativeLayout createDesign(RelativeLayout rel2MainActivity, Context context) {
rel2MainActivity = new RelativeLayout(context);
// ...
rel2MainActivity.addView(relHeader, 0);
rel2MainActivity.addView(relContent, 1);
rel2MainActivity.addView(relFooter, 2);
// rel2MainActivity has 3 children in debug
return rel2MainActivity
}
然后将其用作
relMainActivity= design.createDesign(relMainActivity, this);
setContentView(relMainActivity);
我用纯代码创建布局。 它奏效了,我决定创建另一个 class 来重用我的布局。
我添加了一个新的 class (Designer.java),以便在其他活动中重复使用我的页脚和页眉。
我将上下文作为参数传递给其他活动。
- rel2MainActivity 有 3 个 children
- relMainActivity 为空
我不明白怎么了。我一定是错过了什么
MainActivity.java
RelativeLayout relMainActivity ;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
Designer design = new Designer();
design.createDesign(relMainActivity, this);
// relMainActivity = null in debug
setContentView(relMainActivity);
// java.lang.NullPointerException
}
Designer.java
RelativeLayout relHeader, relFooter, relContent;
public void createDesign(RelativeLayout rel2MainActivity, Context context) {
rel2MainActivity = new RelativeLayout(context);
// ...
rel2MainActivity.addView(relHeader, 0);
rel2MainActivity.addView(relContent, 1);
rel2MainActivity.addView(relFooter, 2);
// rel2MainActivity has 3 children in debug
}
in createDesign
方法直接使用 relMainActivity
或 RelativeLayout 的 return 实例,并在调用 createDesign
方法后立即将其分配给 onCreate 中的 relMainActivity
.
您在 createDesign()
中添加了 3 个视图,但您没有将该视图传回被调用方。
因此,它将 null 赋给 relMainActivity
解法:
这里是你打电话的时候:
RelativeLayout relHeader, relFooter, relContent;
public RelativeLayout createDesign(RelativeLayout rel2MainActivity, Context context) {
rel2MainActivity = new RelativeLayout(context);
// ...
rel2MainActivity.addView(relHeader, 0);
rel2MainActivity.addView(relContent, 1);
rel2MainActivity.addView(relFooter, 2);
// rel2MainActivity has 3 children in debug
// rel2MainActivity view is local to this scope
// you should return it
return rel2MainActivity;
}
并在 :
获取RelativeLayout relMainActivity ;
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
Designer design = new Designer();
relMainActivity = design.createDesign(relMainActivity, this);
// relMainActivity = null in debug
setContentView(relMainActivity);
}
你的文件变量relMainActivity1
在这行代码
design.createDesign(relMainActivity, this);
在
中使用之前,您应该更改代码以初始化relMainActivity1
setContentView(relMainActivity);
即
public RelativeLayout createDesign(RelativeLayout rel2MainActivity, Context context) {
rel2MainActivity = new RelativeLayout(context);
// ...
rel2MainActivity.addView(relHeader, 0);
rel2MainActivity.addView(relContent, 1);
rel2MainActivity.addView(relFooter, 2);
// rel2MainActivity has 3 children in debug
return rel2MainActivity
}
然后将其用作
relMainActivity= design.createDesign(relMainActivity, this);
setContentView(relMainActivity);