0

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>
4

1 に答える 1

5

わかりました、私はあなたに答えがあると思います。

LayoutParams を指定するときは、より具体的にする必要があります。コンパイル例外はスローされませんが、LayoutParams の正しい親クラスを指定しないと、何も表示されません。

レイアウト パラメータを指定するときは、オブジェクトが移動するコンテナのクラスを使用する必要があります。LinearLayout 内にある textview のレイアウト パラメータを設定しているnew LinearLayout.LayoutParams(...)場合、TableRow 内にある textview を作成している場合も同様に使用します。使用する必要があります。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);
于 2012-04-23T19:49:39.947 に答える