Добавление строк в пустой TableLayout во время выполнения - PullRequest
1 голос
/ 08 декабря 2010

Я пытаюсь добавить несколько строк в пустую таблицу во время выполнения.Я попытался использовать тестовый код, но по какой-то причине экран остается пустым.Если бы у меня были элементы в .XML, они отображаются, но не сама таблица, если только я не добавлю несколько строк / элементов в файл .XML.

Я был бы очень признателен за помощь.

Мой класс расширяет Activity.

Вот код для обновления таблицы:

public Runnable UpdateUserList = new Runnable() {
    public void run() {

        TableLayout userTable = (TableLayout) findViewById(R.id.listOfUsers);
        for (String user : userNames) {
            TableRow row = new TableRow(getBaseContext());
            row.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

            TextView field = new TextView(getBaseContext());
            field.setText(user);
            field.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));

            row.addView(field);
            userTable.addView(row, new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
        }
    }
};

Я вызываю код с помощью обработчика таким образом, из потока:

mHandler.post(UpdateUserList);  

Код запускается и не печатает никаких ошибок.

Это XML-файл:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:background="@drawable/main_bg"
    android:layout_width="fill_parent" android:layout_height="fill_parent">


    <LinearLayout android:orientation="vertical"
        android:layout_marginTop="10px" android:gravity="center_horizontal"
        android:layout_weight="1" android:layout_width="fill_parent"
        android:layout_height="wrap_content">

        <TextView android:text="@string/userList"
            android:layout_width="wrap_content" android:layout_height="wrap_content"
            android:textSize="25px" />

    </LinearLayout>

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent" android:layout_height="fill_parent"
        android:id="@+id/listOfUsers">
    </TableLayout>

</LinearLayout>

Любая помощь будет очень полезна.Я очень застрял прямо сейчас.

РЕДАКТИРОВАТЬ: Использование ListView

private Runnable UpdateUserList = new Runnable() {
    public void run() {
        ListView userTable = (ListView) findViewById(R.id.listOfUsers);
        userTable.setAdapter(new ArrayAdapter<String>(getBaseContext(),
                R.layout.connectserver, userNames));
    }
};

И XML:

<ListView android:layout_width="fill_parent"
    android:layout_height="fill_parent" android:id="@+id/listOfUsers" />

Вместо TableLayout.

1 Ответ

2 голосов
/ 08 декабря 2010

Я думаю, вам будет проще использовать List вместо TableLayout.Один из них предназначен для хранения нескольких элементов и может быть легко интегрирован с java.util.List или Array.Во-вторых, и, что более важно, гораздо эффективнее использовать память, если у вас больше элементов, чем видно.

Со списком он создает только экземпляры для видимых строк + 1 для списка из N. Если вы используете TableLayout для отображения того же списка, он создает N чисел из представлений.По мере того, как ваш список растет, увеличивается использование памяти с помощью TableLayout.Не так со списком.Это то же самое, независимо от того, сколько предметов у вас есть в этом списке.

Более того, он предоставляет лучший способ отслеживать, какие предметы были выбраны, когда пользователь нажимает на них.TableLayout не предоставляет никакой помощи в этом, поэтому вы должны использовать свой собственный механизм для выбора.

...