创建按钮网格

时间:2014-02-12 16:46:38

标签: java android xml

对不起,我问这么愚蠢的问题,但是我做不了什么事,这真让我烦恼。实际上,我正在尝试完全按照一个教程编写的内容,但可能我没有正确复制代码。 我想要做的是使用表格布局的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);
}}

有人明白,错误在哪里?

1 个答案:

答案 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);
    }