0

我正在为 Android 创建一个流行的扫雷游戏版本。我正在尝试以编程方式创建一个按钮并将其添加到RelativeLayout。我在这里发现了一些非常相似的东西:如何以编程方式将按钮逐行添加到布局中?

当我尝试运行它时,我在以下位置收到 NullPointerException:

RelativeLayout layout1 = (RelativeLayout) findViewById(R.layout.game);

这是整个代码块:

public void create() {
    RelativeLayout layout1 = (RelativeLayout) findViewById(R.layout.game);
    for(int i = 0; i < gridSize; i++) {
        if(grid[i] == 0) { //if grid pos. indicates an empty cell
            Button empty = new Button(this);
            empty.setBackgroundResource(R.drawable.emptybutton); //set background to empty
            empty.setId(i); //set id to value of i
            empty.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
            layout1.addView(empty); //add the button to the relativeLayout view
            //((Button) findViewById(i)).setOnClickListener(emptyListener); 
        }

提前感谢您的任何回复

4

3 回答 3

2

我认为你得到一个空白屏幕,因为你没有设置内容视图。我的意思是代码做了它应该做的事情,但是你应该删除顶部的“setContentView()”方法并将它放在最后,然后你应该在关闭 onCreate() 之前将它设置为RelativeLayout方法!像这样的东西:

public void create() {
RelativeLayout layout1 = new RelativeLayout(this);
for(int i = 0; i < gridSize; i++) {
    if(grid[i] == 0) { //if grid pos. indicates an empty cell
        Button empty = new Button(this);
        empty.setBackgroundResource(R.drawable.emptybutton); //set background to empty
        empty.setId(i); //set id to value of i
        empty.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        layout1.addView(empty); //add the button to the relativeLayout view
        //((Button) findViewById(i)).setOnClickListener(emptyListener); 
     }
    }
     setContentView(layout1);
   }

另请注意,我稍微更改了 Relativelayout 的声明。我希望这有帮助。:) !

于 2012-04-25T19:58:52.977 回答
2

已设置 Activity 的布局 xml setContentView(R.layout.xxxx)

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.game);


...

这个

 RelativeLayout layout1 = (RelativeLayout) findViewById(R.layout.game);

应该

 RelativeLayout layout1 = (RelativeLayout) findViewById(R.id.relative_id);

R.id...用于映射控件,RelativeLayout 是一个控件。

于 2012-04-10T12:12:28.067 回答
0

您必须输入 RelativeLayout 的 ID,而不是 xml 文件名。尝试使用 RelativeLayout layout1 = (RelativeLayout) findViewById(R.id.yourRelativeLayoutViewID);

于 2012-04-10T12:16:44.477 回答