Android - Добавление макета во время выполнения к основному макету - PullRequest
0 голосов
/ 30 августа 2011

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

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

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

Ответы [ 3 ]

0 голосов
/ 30 августа 2011

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

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

0 голосов
/ 30 августа 2011

Нижняя строка будет первой после super.onCreate(savedInstanceState);

 setContentView(mainLayout);

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

0 голосов
/ 30 августа 2011

Перед циклом добавьте:

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

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

TableRow tr = new TableRow(this);

Положено:

tr.add(new TableRow(this));

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

TableRow tr = new TableRow(this);
...