Android tablelayout视图不会出现

时间:2012-04-23 19:10:14

标签: android view

Android编程新手。

我有一个布局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);


    }

这不会给布局添加任何内容。任何想法为什么这不起作用?

编辑:在这里添加了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>

1 个答案:

答案 0 :(得分:4)

好的,我想我有一个答案。

在指定LayoutParams时需要更具体。虽然它不会抛出编译异常,但如果没有指定LayoutParams的正确父类,则不会显示任何内容。

指定布局参数时,需要使用对象所在容器的类。如果您要设置在LinearLayout内部的textview的布局参数,那么如果您要创建一个textview进入TableRow,则可以使用new LinearLayout.LayoutParams(...),您需要使用TableRow.LayoutParams(...)

下面是完整的代码,稍加修改,因为我没有数据库设置。

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