2012-04-10 2 views
0

Я создаю версию популярной игры Minesweeper для Android. Я пытаюсь программно создать кнопку и добавить ее в RelativeLayout. Я нашел что-то очень похожее здесь: How do I programmatically add buttons into layout one by one in several lines?Создайте кнопку и добавьте ее в вид программно

Когда я пытаюсь запустить его я получаю 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); 
     } 

Заранее спасибо для любых ответов

+0

Я думаю, что ваша проблема не может достичь вашей игры.xml. можете ли вы предоставить свою структуру (план), пожалуйста? – guness

+1

Я использую массив ints для имитации поля тральщика. например, значение 9 в позиции [2] указывает на наличие шахты в позиции 2 в поле тральщика. то я использую инструкции if для создания разных кнопок. Если кнопка, представляющая мишу, будет создана, если позиция [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

yes Я установил представление содержимого, я изменил ссылку на ID, а не на имя самого файла, но я все еще не вижу никаких кнопок при запуске действия. У меня есть вызов метода create() в методе onCreate(), является ли любой вызов, который помещается в метод onCreate(), когда начинается действие? – DanielFitzgerald123

+0

показать трассировку логарифма. –

+0

больше не получают исключение nullpointerexception. если я вызову метод create(), экран просто останется пустым, никаких кнопок или чего-либо – DanielFitzgerald123

0

Необходимо ввести идентификатор RelativeLayout, а не имя файла xml. попробуйте с RelativeLayout layout1 = (RelativeLayout) findViewById (R.id.yourRelativeLayoutViewID);

2

Я думаю, что вы получаете пустой экран, потому что вы не задали контент. Что я имею в виду, так это то, что коды делают то, что он должен делать, однако вы должны удалить метод setContentView() вверху и поместить его в конец, тогда вы должны установить его в RelativeLayout, прежде чем закрыть onCreate () метод! Что-то вроде этого:

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

Смежные вопросы