2011-01-24 8 views
1

TableLayoutクラスを拡張しようとしています。これにより、クラスによって自動的に行が移入されます。私が抱えている問題は、カスタムクラス内に追加する行が表示されないことです。TableLayoutクラスの拡張 - 行の追加

Ex。アクティビティ内:

private TextView getTableCell(String text) { 
    TextView tv = new TextView(this); 
    tv.setText(text); 
    tv.setLayoutParams(new LayoutParams(
      LayoutParams.FILL_PARENT, 
      LayoutParams.WRAP_CONTENT)); 

    return tv; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    DatasetTableLayout table = (DatasetTableLayout) findViewById(R.id.table); 
    TableRow tr = new TableRow(this); 
    tr.addView(getTableCell("activity1")); 
    tr.addView(getTableCell("activity2")); 
    tr.addView(getTableCell("activity3")); 
    table.addView(tr); 

これで、テーブルに正常に行が追加されます。しかし、私のカスタムクラス内:

private TextView getTableCell(String text) { 
    TextView tv = new TextView(context); 
    tv.setText(text); 
    tv.setLayoutParams(new LayoutParams(
     LayoutParams.WRAP_CONTENT, 
     LayoutParams.WRAP_CONTENT)); 

    return tv; 
} 

private void update() { 
    TableRow tr = new TableRow(context); 
    tr.addView(getTableCell("class1")); 
    tr.addView(getTableCell("class2")); 
    tr.addView(getTableCell("class3")); 
    addView(tr); 
} 

成功した行を追加しません。 getChildCount()とgetChildAt()はこの行を返しますが、行が追加されますが、表示されません。

何か不足していますか?

+0

私が発見しました問題。 DatasetTableLayout.getTableCell()(DatasetTableLayoutはTableLayoutを継承します)内で、新しいLayoutParams()を呼び出すとandroid.widget.TableLayout.LayoutParamsオブジェクトが作成されます。必要なものはandroid.widget.TableRow.LayoutParamsです。 教訓 - Eclipseの整理インポートコマンドに頼らないでください! – Adam

+0

それは私の人生を救う。あなたはどんなlayoutparamでもテーブルレイアウトでは機能しませんが、talberow.layoutparam – Adem

答えて

0

私の推測は、この行に沿ったものです:addView(tr);TableRowTableLayoutに追加しましたか?

編集:

TableLayout tb = new TableLayout(this); 
TableRow tr = new TableRow(this); 
TextView tv = new TextView(this); 
tv.setText("row"); 
tr.addView(tv); 
tb.addView(tr); // this is what I mean 
setContentView(tb); 

作成する行のコードが正常に動作しますが、あなたは後でそれをテーブルに追加し、していない場合は、親ビューにテーブルを追加するだけでなく、あなたの行はwouldn表示されません。

+0

下記の私の答えを参照してください(コメントを追加するとテキストを正しく書式設定できないようです) – Adam

+0

オリジナルの投稿を編集できます。とにかく、私が意味することは:あなたはaddView(tr)を呼び出しましたが、どこに追加するのですか?たぶんそれが表示されない理由です。更新したい行への参照を取得し、addView(tr)を呼び出す必要があります。 – springrolls

+0

addView(tr)を介してテーブルに正常に追加されました。 update()のステートメント問題はLayoutParams(オリジナル投稿のコメントを参照)でした。 – Adam

0

@theresia(私がコメントを追加する場合は、テキストの書式を設定するように見えることはできません):

for(int i = 0; i < getChildCount(); i++) { 
    TableRow row = (TableRow) getChildAt(i); 
    for(int j = 0; j < row.getChildCount(); j++) { 
     TextView tv = (TextView) row.getChildAt(j); 
     Log.e("DatasetTableLayout-data", tv.getText().toString() + " "); 
    } 
} 

は私を与える: それはのTableRowを追加するように見えるん

01-24 11:03:31.668: ERROR/DatasetTableLayout-data(1624): activity1 
01-24 11:03:31.677: ERROR/DatasetTableLayout-data(1624): activity2 
01-24 11:03:31.698: ERROR/DatasetTableLayout-data(1624): activity3 
01-24 11:03:31.698: ERROR/DatasetTableLayout-data(1624): class1 
01-24 11:03:31.698: ERROR/DatasetTableLayout-data(1624): class2 
01-24 11:03:31.727: ERROR/DatasetTableLayout-data(1624): class3 
関連する問題