2010-12-08 2 views
1

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

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

Мой класс расширяет деятельность.

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

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> 

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

EDIT: Использование 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.

ответ

2

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

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

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

+0

Благодарим вас за ответ и помощь. Я пытаюсь переключиться на ListView, но у меня все еще есть такая же проблема. Я обновляю свой код в своем первом сообщении. – Jary 2010-12-08 05:31:47

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