2017-03-07 72 views
2

これは多くの質問を繰り返しますが、初めてのことです。私は何度も検索して結果を得ることができず、ここに投稿しました。TableLayoutをTableLayoutに動的に追加する

私はTableLayoutの部分がxml部分に書き込まれたテーブルを動的に作成しています。

<RelativeLayout 
     android:layout_width="70dp" 
     android:layout_height="40dp" 
     android:background="@color/colorPrimaryDark" 
     android:id="@+id/componentA"> 
     <TableLayout 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:gravity="center" 
      android:id="@+id/tl_componentA"> 


     </TableLayout> 

</RelativeLayout> 

私は今、私は関連

createTableRowColumn(tableLayoutA); 

機能として以降、ここから動的に行を追加しようとしたテーブル

TableLayout tableLayoutA; 
tableLayoutA= (TableLayout)view.findViewById(R.id.tl_componentA); 

のためのオブジェクトを作成したが

private void createTableRowColumn(TableLayout tableLayout){ 

     TableRow tableRow1= new TableRow(this.context); 
     tableRow1.setBackgroundColor(getResources().getColor(R.color.colorAccent)); 
     setTableRowColumnProperty(tableRow1); 
     tableLayout.addView(tableRow1); 
    } 
ある

プライベートvoid setTa bleRowColumnProperty(のTableRowのTableRow){

TableRow.LayoutParams layoutParams= new TableRow.LayoutParams(70, 40); 
    tableRow.setLayoutParams(layoutParams); 
} 

私はすべてこれをしなかったし、何もエミュレータの中で私を示しませんでした。しかし、私がmannually xmlで同じ構造を与えたとき、物事はうまくいきました。私はそれは私がXML自体にtableLayoutAのサイズを固定しているが、私は、なぜ得ることができなかった私には0を示したトーストで

Toast.makeText(getContext(), tableLayoutA.getHeight()+"", Toast.LENGTH_LONG).show(); 

を把握するために何かをしようとした。このため

+0

詳細を教えてください。 –

+0

とにかく私は動的で、データがあなたのTableLayoutの変更を続けていると理解しています、それはあなたが言うことですか?または –

+0

コードを修正して、私が間違っているところに行くことができるように投稿してください。 –

答えて

2

実生活のテーブルには少なくとも1行と1列が必要です。 行が作成されただけなので、表は表示されませんでしたが、列はありませんでした。

表示するために列に列を追加する必要があります。

これを試してみてください:

TextView label_date = new TextView(this); 
    label_date.setText("DATE"); 
    label_date.setTextColor(Color.WHITE); 
    label_date.setPadding(5, 5, 5, 5); 
    tableRow.addView(label_date);// add the column to the table row here 

    tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

あなたはそれになりたいどのような値でのTextViewを置き換えることができます。ここで

tableLayout.addView(tableRow, new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT)); 

され、何が起こるか、あなたはtableLayoutにビューを追加し、あなたはそれが表示され伝える、と言うと、あなたは、ビューの幅と高さは、それが内容だラップする必要があると言います。

また、40,70を指定するのは良い考えではありません。画面サイズが変わるとどうなりますか?さらに、ライブラリを使用して動的なビューの追加と削除を処理します。あなたは車輪を再開発し、多くの時間と労力を節約する必要はありません。テーブルビューの場合は、https://github.com/EsotericSoftware/tablelayoutが良いかもしれません(分かりません)。別の質問は、あなたが探しているテーブルビューですか?あなたがあなたのユースケースを理解していないので、テーブルビューのためにrecyclerViewを誤解していないことを確認してください。

有用なリンク:https://technotzz.wordpress.com/2011/11/04/android-dynamically-add-rows-to-table-layout/

+0

それはうまくいきます。あなたは何が起こったか私に説明してもらえますか? これはどのように動作するか説明します--- tableLayout.addView(tableRow、new ViewGroup.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT、ViewGroup.LayoutParams.WRAP_CONTENT)); –

+0

あなたが私の答えが役に立つとわかったら – rgv

+0

なぜTableRow.LayoutParamsを使いませんでしたか? –

関連する問題