4

I am creating a Fragment that will dynamically create a tableLayout but I am having problems with it as it is not being displayed. Can someone tell me why it is not displaying? The section label can be displayed except for the table.

Here is my xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_fragment_bp_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:gravity="top"
android:orientation="vertical" >

<TextView
        android:id="@+id/section_bp_label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

<TableLayout
    android:id="@+id/tableLayoutBloodPressure"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


</TableLayout>

</LinearLayout>

Here is my Fragment Class - the data is for testing only

public class BloodPressureFragment extends Fragment {

public BloodPressureFragment() {
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_bp_list, container,
            false);

    TextView txt = (TextView) rootView.findViewById(R.id.section_bp_label);
    txt.setText("Blood Pressure History Logs");

    TableLayout ll = (TableLayout) rootView
            .findViewById(R.id.tableLayoutBloodPressure);

    for (int i = 1; i < 10; i++) {
        TableRow tbrow = new TableRow(getActivity().getApplicationContext());
        tbrow.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
                LayoutParams.WRAP_CONTENT));

        TextView tv1 = new TextView(getActivity().getApplicationContext());
        tv1.setLayoutParams(new TableRow.LayoutParams(
                TableRow.LayoutParams.MATCH_PARENT,
                TableRow.LayoutParams.WRAP_CONTENT));
        tv1.setId(i);

        tv1.setText("Test id: " + i);
        tbrow.addView(tv1);

        ll.addView(tbrow, new TableLayout.LayoutParams(
                LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    }

    return rootView;
}
}
jantox
  • 2,185
  • 4
  • 21
  • 22
  • Why do you have so many `LayoutParams()`?! I think that is the issue! Get rid of all of them, no joke, all of them are useless. – LuckyMe Jun 25 '13 at 05:22
  • Hi thanks for the reply, I actually dont have LayoutParams before but it is still not displaying so I just added it just in case that is the reason, still not displaying. Is there LayoutParams issue with Fragment? – jantox Jun 25 '13 at 05:28
  • I am just thinking they might be conflicting with each other. Try this: change `View rootView` to `LinearLayout rootView`. – LuckyMe Jun 25 '13 at 05:43
  • Still not working. If I change it to Activity rather than adding the Fragment inside FragmentActivity then it will work. – jantox Jun 25 '13 at 06:14

2 Answers2

1

I have same problem, and my solution is to inflate row layout from fragment view.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){
    v = inflater.inflate(R.layout.fragment_intro_a,container,false); // infalte normally
    Tablelayout mytable = (TableLayout) v.findViewById(R.id.mytable); // init table

    /* your stuff*/

    /* now fill table layout directly on fragment */
    TableRow row = new TableRow(getActivity()); // new row
    View table_row_view = v.inflate(getActivity(),R.layout.your_layout,row); // inflate from parent view;
    row.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    TextView mytextview = (TextView)vvv.findViewById(R.id.yourtextview-in-yourlayout);
    mytable.addView(row, new TableLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
    /* TADAAN! rows is visible! */

}

0

Instead of this hiearchy

[TableLayout < TableRow < Textview]

try to add directly textview to tablelayout, avoiding tablerows.

UPDATE This works fine for me. Create a tableLayout where generate few tablerows with some textviews inside.

    TableLayout tl;
    tl = (TableLayout) rootView.findViewById(R.id.fragment1_tlayout);

    for (int i = 0; i < 30; i++) {

        TableRow tr = new TableRow(getActivity());

        tr.setId(i);
        tr.setBackgroundResource(R.color.RoyalBlue);
        tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

                    //TEXTVIEWS********
        TextView tv1 = new TextView(getActivity());
        tv1.setText("TEST NUMBER");
        tv1.setId(i);
        tv1.setTextColor(Color.WHITE);
        tv1.setTextSize(20);
        tv1.setPadding(5, 5, 5, 5);
        tr.addView(tv1);

        TextView tv2 = new TextView(getActivity());

        tv2.setText("nº: "+ i);
        tv2.setId(i+i);
        tv2.setTextColor(Color.WHITE);
        tv1.setTextSize(20);
        tv2.setPadding(5, 5, 5, 5);
        tr.addView(tv2);

        tl.addView(tr, new TableLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));

    }

XML:

<ScrollView
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scrollbars="vertical" >

    <TableLayout
        android:id="@+id/fragment1_tlayout"
        android:background="@color/LightGreen"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:stretchColumns="0,1" >

    </TableLayout>
</ScrollView>
PedroHawk
  • 622
  • 5
  • 19