2012-04-10 10 views
0

Android用の人気のMinesweeperゲームのバージョンを作成しています。プログラムでボタンを作成し、それをRelativeLayoutに追加しようとしています。ここでは、コードのブロック全体だボタンを作成してプログラムでビューに追加する

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

::私はそれを実行しようとすると、私はでNullPointerExceptionが取得How do I programmatically add buttons into layout one by one in several lines?

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

は、事前に感謝をここに非常によく似たものを、私を見つけました任意の応答について

+0

あなたの問題はあなたのgame.xmlに届かないと思います。あなたの構造(概要)を提供することはできますか? – guness

+1

私はminesweeperフィールドをシミュレートするためにintの配列を使用しています。例えば、位置[2]の値9は、地雷探査欄の位置2に地雷があることを示します。 if文を使用して別のボタンを生成しています。つまりposition [2] == 9の場合、鉱山を表すボタンが作成されます。これらのボタンを地雷探査フィールドを表す相対レイアウトに追加しようとしています。それは役に立ちますか? – DanielFitzgerald123

答えて

2

アクティビティのレイアウト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はコントロールです。

+0

はいコンテンツビューを設定しましたが、ファイル名自体ではなくIDへの参照が変更されましたが、アクティビティの開始時にはまだボタンが表示されません。 onCreate()メソッドでcreate()メソッドを呼び出すと、アクティビティの開始時にonCreate()メソッドが呼び出されます。 – DanielFitzgerald123

+0

あなたのlogcatトレースを表示します。 –

+0

は、もはやnullpointerexceptionを取得しません。私がcreate()メソッドを呼び出すと、画面は空白になります。ボタンや何も表示されません。 – DanielFitzgerald123

0

xmlファイル名ではなく、RelativeLayoutのIDを入力する必要があります。 を試してみてください RelativeLayout layout1 =(RelativeLayout)findViewById(R.id.yourRelativeLayoutViewID);

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の宣言を少し変更しました。 私はこれが役立つことを願っています。 :)!

+0

応答がありがたいです。テーブルレイアウトに変更し、いくつかの追加コードを追加しました。これは現在役に立ちます – DanielFitzgerald123

+1

嬉しいです。 – Ange

関連する問題