2012-04-10 5 views
0

Ich erstelle eine Version des beliebten Minesweeper-Spiels für Android. Ich versuche, eine Schaltfläche programmgesteuert zu erstellen und sie einem RelativeLayout hinzuzufügen. Ich habe etwas sehr ähnlich hier gefunden: How do I programmatically add buttons into layout one by one in several lines?Erstellen Sie eine Schaltfläche und fügen Sie sie einer Ansicht programmgesteuert hinzu

Wenn ich versuche, es zu laufen ich eine Nullpointer bekommen:

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

Hier ist der ganze Code-Block:

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

Vielen Dank im Voraus für alle Antworten

+0

Ich denke, dein Problem kann deine game.xml nicht erreichen. Können Sie bitte Ihre Struktur (Umriss) angeben? – guness

+1

Ich verwende ein Array von Ints, um das Minesweeper-Feld zu simulieren. zum Beispiel gibt ein Wert von 9 an Position [2] an, dass sich eine Mine auf Position 2 auf dem Minesweeper-Feld befindet. dann verwende ich if-Anweisungen, um verschiedene Schaltflächen zu generieren, d. h. wenn eine Schaltfläche eine Mine darstellt, wird Position [2] == erstellt. 9. Ich versuche, diese Schaltflächen zu einem relativen Layout hinzuzufügen, das das Minesweeper-Feld darstellt. Hilft das? – DanielFitzgerald123

Antwort

2

haben Sie das Layout xml der Aktivität von setContentView(R.layout.xxxx)?

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


... 

dieser

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

sollte

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

R.id... zum Abbilden Steuerung verwendet werden und RelativeLayout ist eine Kontrolle.

+0

Ja, ich habe die Inhaltsansicht festgelegt, ich habe den Verweis auf die ID geändert und nicht den Dateinamen selbst, aber ich sehe immer noch keine Schaltflächen, wenn die Aktivität startet. Ich habe den Aufruf der Create() -Methode in der onCreate() -Methode, ist jeder Aufruf, der in der onCreate() -Methode abgelegt wird, die beim Start der Aktivität aufgerufen wird? – DanielFitzgerald123

+0

zeigen Sie Ihre Logcat-Trace an. –

+0

erhalten keine Nullpointerexpektion mehr. Wenn ich die create() -Methode anrufe, bleibt der Bildschirm leer, keine Knöpfe oder irgendetwas. – DanielFitzgerald123

0

Sie müssen die ID des RelativeLayout eingeben, nicht den Namen des xml-Fils. versuchen Sie mit RelativeLayout layout1 = (RelativeLayout) findViewById (R.id.yourRelativeLayoutViewID);

2

Ich denke, Sie bekommen einen leeren Bildschirm, weil Sie nicht die Inhaltsansicht festgelegt haben. Was ich meine ist, dass die Codes tun, was es tun soll, aber Sie sollten die "setContentView()" Methode an der Spitze und am Ende, dann sollten Sie es auf die RelativeLayout setzen, bevor Sie die onCreate schließen () Methode! So etwas wie das:

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

Beachten Sie auch, dass ich die Deklaration des Relative Layout etwas geändert habe. Ich hoffe, das hilft. :)!

+0

danke für die Antwort, ich habe ein Table-Layout und einen zusätzlichen Code hinzugefügt und es funktioniert jetzt – DanielFitzgerald123

+1

Ich bin froh, dass ich helfen könnte – Ange

Verwandte Themen