динамическое обновление TableLayout в Android - PullRequest
0 голосов
/ 29 января 2012

Привет всем! У меня есть этот TableLayout и экран пуст после создания. У меня нет XML-файла из-за спецификации, что количество строк и столбцов дано вручную. Сначала я должен заполнить таблицу пустыми 1 x 1 невидимыми TextView-s, потому что это решение нужно использовать, если я хочу добавить кнопку в кординаты (k, l), где k <= строки и l <= столбцы. Код следующий: </p>

package hu.harge;

import java.awt.Button;

import javax.swing.text.TableView.TableRow;

import sun.jkernel.Bundle;

public class AccessibleLayoutActivity extends Activity {

    private int rows, columns;
    private TableLayout tl = null;
    private ScrollView sv;

    public void createView(int rows, int columns) {
        // TODO Auto-generated method stub

        this.rows = rows;
        this.columns = columns;
        this.sv = new ScrollView(this);

        tl = new TableLayout(this);
        for (int i = 0; i < rows; i++) {
            TableRow tr = new TableRow(this);
            for (int j = 0; j < columns; j++) {
                TextView tv = new TextView(this);
                tr.addView(tv);
                tv.setMaxHeight(1);
                tv.setMaxWidth(1);

            }
            tl.addView(tr);

        }

        sv.addView(tl, new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
        this.setContentView(sv);
    }

    public void putButton(int row, int column, final String label) {
        if (tl != null) {

            // TODO Auto-generated method stub
            if (row <= rows && column <= columns) {

                Button b = new Button(this);
                b.setText(label);
                TableRow tr = (TableRow) tl.getChildAt(row - 1);
                tr.removeViewAt(column - 1);
                tr.addView(b, column - 1, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

            }
        }

    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        createView(6, 3);

        putButton(1, 3, "Exit");
        putButton(2, 1, "Menu");

    }
}

ListView не может быть решением моей проблемы, я думаю.

Проблема в том, что на экране ничего не светит.

спасибо за ответы: Джери

Ответы [ 2 ]

0 голосов
/ 19 октября 2014

Док говорит: дочерним элементам TableRow не нужно указывать атрибуты layout_width и layout_height в файле XML.TableRow всегда заставляет эти значения быть соответственно MATCH_PARENT и WRAP_CONTENT.

0 голосов
/ 30 января 2012

Я вижу здесь много ошибок: во-первых,

tr.addView(b, column - 1, new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

следует изменить на

tr.addView(b, column - 1, new TableRow.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

Класс компоновок должен всегда иметь такой префикс в соответствии с классом родительского элемента.

Кроме того, я не вижу, где вы установите какие-либо макеты для TableRow или таблицы, или любого из ТВ. Любой вид должен иметь заданную высоту и ширину. Всегда.

Если это не поможет (у вас могут быть и другие ошибки), лучше начните использовать макеты из XML, заставьте их работать, а затем перемещайте их в код один за другим. И проверяйте функциональность на каждом шагу. Также дайте всем элементам некоторый фон, чтобы увидеть их. И поменяйте их на время отладки немного больше - опять же, чтобы увидеть их лучше ... как волк в Red Hat: -)

...