2012-01-29 1 views
0

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

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 не может быть решением для моей проблемы, я думаю.

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

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

+0

Итак, какова ваша фактическая проблема? P.S .: Не могли бы вы попытаться лучше форматировать свой код в будущем? Я просто исправил это для этого поста. – henrik

+0

@Henrik Вы правы, описание проблемы было не совсем понятно, поэтому я исправил его. – Viceman3

ответ

0

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

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

Класс layoutparams должен всегда иметь такие prefix, в соответствии с классом родителя элемента.

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

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

+0

Спасибо, проблема решена. – Viceman3

0

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

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

  • Нет связанных вопросов^_^