2011-08-30 4 views
0

Я пытаюсь добавить tableLayout во время выполнения к существующему LinearLayout в main.xml. Я добавил editText (R.id.editText1) в main.xml. Вот мой код. Это не работает. Я получаю ошибку времени выполнения (приложение неожиданно остановилось).Android - Добавление макета во время выполнения к основному макету

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    text = (EditText)findViewById(R.id.editText1); 
    TableLayout tblLayout = new TableLayout(this); 
    tblLayout.setLayoutParams(new TableLayout.LayoutParams(8,5)); 
    tblLayout.setPadding(1,1,1,1); 

    for(int r=0; r<ROW_COUNT; ++r) 
    { 
     TableRow tr = new TableRow(this); 
     for(int c=0; c<COL_COUNT; ++c) 
     { 
      int index = r * COL_COUNT + c; 
      buttonList.add(new Button(this)); 
      buttonList.get(index).setText(buttonNames[index]); 
      tr.addView(buttonList.get(index), 60, 30); 
     } 
     tblLayout.addView(tr); 
    } 

    LinearLayout mainLayout = (LinearLayout)findViewById(R.layout.main); 
    mainLayout.addView(tblLayout);   

    setContentView(mainLayout); 
} 

Любые указатели были бы весьма благодарны. Благодарю.

+0

Вставьте ваш LogCat. Это может быть любое количество причин ... Например, buttonList может быть нулевым (вы его создавали?) – IncrediApp

+0

В соответствии с логарифмом ошибка, похоже, происходит в этой строке CalculatorActivity.java:46, которая равна mainLayout. addView (tblLayout); У меня есть экземпляр buttonList. –

ответ

0

Перед вашей петли оных:

Arraylist<TableRow> tr = new ArrayList<TableRow>; 

В цикле вместо:

TableRow tr = new TableRow(this); 

Put:

tr.add(new TableRow(this)); 

И, наконец, заменить вашу tr на tr.get(r). Что-то вроде этих изменений должно помочь вам, потому что вы стереть тр на каждом повороте вашей петли с:

TableRow tr = new TableRow(this); 
0

г Беззаботного просто одна вещи написать setContentView(R.layout.your Main Layout); beofre text = (EditText)findViewById(R.id.editText1); означает в верхней части методы onCreate() потому что мы не можем определить любой view перед тем setContentView.

без setContentView вы не можете найти какой-либо вид, как в findViewById(R.id.editText1);

0

Ниже линии будет первым после super.onCreate(savedInstanceState);

setContentView(mainLayout); 

только тогда findViewByid работает

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