Adding data row dynamically
-
26-10-2019 - |
Question
I'm using eclipse + android SDK.
I'm trying to create a table with data provided by sensors. I get the information correctly, by i'm having problems to make a table to show it in XML dinamically.
This is the sensorinfo.XML:
<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1"
android:id="@+id/SensorInfoTableLayout">
<TableRow>
<TextView
android:layout_column="1"
android:text="@string/sensor_name_title"
android:padding="3dip" />
<TextView
android:layout_column="2"
android:text="@string/sensor_type_title"
android:padding="3dip" />
<TextView
android:layout_column="3"
android:text="@string/sensor_value_title"
android:padding="3dip" />
<TextView
android:layout_column="4"
android:text="@string/sensor_unit_title"
android:padding="3dip" />
</TableRow>
<View
android:layout_height="4dip"
android:background="#FF909090" />
</TableLayout>
And this is the code of my activity:
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
getSensorInfo();
setContentView(R.layout.sensorinfo);
setInfoByView();
}
And
private void setInfoByView()
{
/* Find Tablelayout defined in xml */
TableLayout myTableLayout = (TableLayout)findViewById(R.id.SensorInfoTableLayout);
/* Create a new row to be added. */
TableRow myTableRow = new TableRow(this);
myTableRow.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
/* Create a Button to be the row-content. */
Button b = new Button(this);
b.setText("Dynamic Button");
b.setLayoutParams(new LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
myTableRow.setBackgroundColor(5);
/* Add Button to row. */
myTableRow.addView(b);
/* Add row to TableLayout. */
myTableLayout.addView(myTableRow,new TableLayout.LayoutParams(
LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT));
}
THIS IS A TEST, i'm trying to include a button dinamically, if work, i will put the information i get from getSensorInfo();
But my Activity looks like this:
What could I be doing wrong?
All the info i found was THIS, but the answers didn't help me.
Solution
First of all create one Table Layout in your XML file like this :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#BFD6E8">
<ScrollView android:id="@+id/image_scroll"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TableLayout android:id="@+id/image_table"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TableLayout>
</ScrollView>
</LinearLayout>
Then use this code for creating dynamic row inside the Table Layout :
TableLayout image_table=null;
image_table=(TableLayout)findViewById(R.id.image_table);
for(int i=0; i<10; i++){
TableRow tableRow=new TableRow(this);
tableRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
tableRow.setGravity(Gravity.CENTER_HORIZONTAL);
tableRow.setPadding(5, 5, 5, 5);
for(int j=0; j<1; j++){
Button bttn=new Button(this);
bttn.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
bttn.setText(Hello);
tableRow.addView(image, 200, 200);
}
image_table.addView(tableRow);
}
FINAL (test) SOLUTION:
private void setInfoByView2()
{
TableLayout myTableLayout = null;
TableRow myTableRow = new TableRow(this);
myTableLayout = (TableLayout)findViewById(R.id.SensorInfoTableLayout);
myTableRow.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
//myTableRow.setGravity(Gravity.CENTER_HORIZONTAL);
myTableRow.setPadding(5, 5, 5, 5);
Button bttn = new Button(this);
bttn.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));
bttn.setText("Hello");
myTableRow.addView(bttn, 200, 200);
myTableLayout.addView(myTableRow);
}
And the button is visible now.
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow