对不起,我问这么愚蠢的问题,但是我做不了什么事,这真让我烦恼。实际上,我正在尝试完全按照一个教程编写的内容,但可能我没有正确复制代码。 我想要做的是使用表格布局的4x4网格按钮。 这是我的xml活动:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/Field"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TableLayout>
这是我的java代码:
public class Pokus extends Activity{
public void onCreate(Bundle savedInstanceState) {
TableLayout field = (TableLayout)findViewById(R.id.Field);
Button but[][] = new Button[4][4];
for(int i = 1; i!=5; i++){
TableRow tr = new TableRow(this);
for(int r = 1; r!=5; r++){
tr.addView(but[i][r]);
}
field.addView(tr);
}
setContentView(R.layout.activity_pokus);
}}
有人明白,错误在哪里?
答案 0 :(得分:1)
在执行任何其他操作之前设置内容视图。这应该放在onCreate
方法的开头:
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pokus);
上述评论者也是对的;从0开始i
:
for(int i = 0; i<4; i++){
TableRow tr = new TableRow(this);
for(int r = 1; r<4; r++){
tr.addView(but[i][r]);
}
field.addView(tr);
}
Button but[][] = new Button[4][4];
- 您尚未初始化阵列中的按钮。在您编写的循环之前,首先使用它迭代地完成它:
for(int i = 0; i < 4; i++)
for(int j = 0; j < 4; j++)
but[i][j] = new Button();
这将解决您的NullPointerException
。
^而不是完成所有这些,只是不要使用数组而只是说:
for(int i = 0; i<4; i++){
TableRow tr = new TableRow(this);
for(int r = 1; r<4; r++){
tr.addView(new Button()); // new Button() instead of but[i][j]
}
field.addView(tr);
}