2012-04-23 3 views
0

Новое в программировании на Android.Android tablelayout view не отображается

У меня есть формат XML, к которому я хочу добавить список (с элементами из базы данных), отформатированный как таблица.

Вот код:

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.edit_cat); 

     DatabaseHandler db = new DatabaseHandler(this); 
     List<Category> allCategories = db.getAllCategories(); 

     //Get the main layout from XML 
     LinearLayout mainLayout = (LinearLayout) findViewById(R.id.edit_cat); 

     //Create table layout for the categories 
     TableLayout catList = new TableLayout(this); 

     //Iterate the categories, and organize in tables 
     for (Category category : allCategories) { 
      TableRow tr = new TableRow(this); 

      //Display category name 
      TextView name = new TextView(this); 
      name.setLayoutParams(new LayoutParams(      
        LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT)); 

      name.setText(category.getName()); 


      //Display category type 
      TextView type = new TextView(this); 
      type.setText(category.getType()); 
      type.setLayoutParams(new LayoutParams(
        LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT)); 

      //Display edit button 
      Button btnEdit = new Button(this); 
      btnEdit.setText(getResources().getString(R.string.edit)); 

      btnEdit.setLayoutParams(new LayoutParams(
        LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT)); 

      //Display delete button 
      Button btnDelete = new Button(this); 
      btnDelete.setText(getResources().getString(R.string.delete)); 

      btnDelete.setLayoutParams(new LayoutParams(
        LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT)); 


      tr.addView(name); 
      tr.addView(type); 
      tr.addView(btnEdit); 
      tr.addView(btnDelete); 

      catList.addView(tr, new TableLayout.LayoutParams(
        LayoutParams.FILL_PARENT, 
        LayoutParams.WRAP_CONTENT)); 
     } 

     mainLayout.addView(catList); 


    } 

Это ничего не добавляет к раскладке. Любые идеи, почему это не работает?

EDIT: Добавлен код XML здесь:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/edit_cat" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:layout_weight="1"> 

<TextView style="@style/pageHeader" 
    android:text="@string/catEditor"/> 

<Button 
    android:id="@+id/btnNewCategory" 
    android:text="@string/newCategory" 
    android:textSize="11pt" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:onClick="onBtnClicked"/> 
<Button 
    android:id="@+id/back" 
    android:text="@string/back" 
    android:textSize="11pt" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:onClick="onBtnClicked"/> 

</LinearLayout> 
+0

Вы уверены, что все категории не пусты? Вы получаете данные из базы данных? – kosa

+0

Да, я добавил Log.v ('EditCat', category.getName()) и получил список в logCat без проблем. – LongInt

+0

Я бы предложил проверить параметры настройки edit_cat.xml alos. – kosa

ответ

4

Хорошо, я думаю, что у меня есть ответ для вас.

Вы должны быть более конкретными, когда указываете LayoutParams. Хотя он не генерирует исключение для компиляции, если вы не укажете правильный родительский класс LayoutParams, ничего не появится.

Когда вы указываете параметры макета, вам нужно использовать класс контейнера, в котором находится объект. Если настройки макета paramters из в TextView, что происходит внутри LinearLayout, вы будете использовать new LinearLayout.LayoutParams(...), подобным образом, если вы создаете TextView идти внутри TableRow, вам нужно использовать TableRow.LayoutParams(...)

Ниже приведен полный код с незначительными потому что у меня не было настройки db.

LinearLayout mainLayout = (LinearLayout) findViewById(R.id.edit_cat); 

    //Create table layout for the categories   
    TableLayout catList = new TableLayout(this); 

    //Set the table layout to Match parent for both width and height 
    // Note: We use LinearLayout.LayoutParams because the TableLayout is going inside a LinearLayout 

    catList.setLayoutParams(
     new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 


    //Iterate the categories, and organize in tables  
    for(int i = 0; i < 5; i++) 
    { 
     TableRow tr = new TableRow(this); 
     /* Since the table row is going inside a table layout, we specify the parameters using TableLayout.LayoutParams */ 
     tr.setLayoutParams(new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT,LayoutParams.WRAP_CONTENT)); 

     //Display category name 
     TextView name = new TextView(this); 

     /* Since the TextView is going inside a TableRow, we use new TableRow.LayoutParams ... */ 
     name.setLayoutParams(new TableRow.LayoutParams(
       TableRow.LayoutParams.FILL_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT)); 

     name.setText("Test Row - " + i); 
     name.setBackgroundColor(Color.RED); 


     //Display category type 
     TextView type = new TextView(this); 
     type.setText("Type Row - " + i); 
     type.setBackgroundColor(Color.GREEN); 
     type.setLayoutParams(new TableRow.LayoutParams(
       TableRow.LayoutParams.FILL_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT)); 

     //Display edit button 
     Button btnEdit = new Button(this); 
     btnEdit.setText("Edit"); 

     btnEdit.setLayoutParams(new TableRow.LayoutParams(
       TableRow.LayoutParams.FILL_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT)); 

     //Display delete button 
     Button btnDelete = new Button(this); 
     btnDelete.setText("Delete"); 

     btnDelete.setLayoutParams(new TableRow.LayoutParams(
       TableRow.LayoutParams.FILL_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT)); 


     tr.addView(name); 
     tr.addView(type); 
     tr.addView(btnEdit); 
     tr.addView(btnDelete); 

     catList.addView(tr); 
    } 


    mainLayout.addView(catList); 
+0

Спасибо, но это не сработало ... – LongInt

+0

Не уверен, что вы заметили, но я изменил его на LinearLayout вместо Tablelayout. Кроме того, просто предложение, но трудно сказать, если это сама таблица, которая не отображается, или все данные, которые вы вставляете. Я бы предложил создать таблицу в файле XML (временно) и просто создать строки программно. Когда это работает, вы также можете перейти к созданию таблицы программно. – Gophermofur

+0

Хорошо, я просто попробую. – LongInt

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