Show table data in android

I want to get data from database in my android table view .

Should I use a loop? Is it static for this?

+7
source share
6 answers
 rs1 = stmt.executeQuery("SELECT * from message"); StringBuilder sb = new StringBuilder(); while (rs1.next()) { String script = rs1.getString(1); String call = rs1.getString(2); String price = rs1.getString(3); String stoploss = rs1.getString(4); String target = rs1.getString(5); String ltp = rs1.getString(6); String exit = rs1.getString(7); sb.append(script).append(";").append(call).append(";").append(price).append(";").append(stoploss).append(";").append(target).append(";").append(ltp).append(";").append(exit).append("_"); } out.print(sb.toString()); out.flush(); 

for this you have XML for this you have XML for example

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_marginTop="20dip"> <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+id/tab" > <TableRow> </TableRow> </TableLayout> </LinearLayout> 

to display the data in the android file you are writing.

  String st = new String(str); Log.e("Main",st); String[] rows = st.split("_"); TableLayout tableLayout = (TableLayout)findViewById(R.id.tab); tableLayout.removeAllViews(); for(int i=0;i<rows.length;i++){ String row = rows[i]; TableRow tableRow = new TableRow(getApplicationContext()); final String[] cols = row.split(";"); Handler handler = null; for (int j = 0; j < cols.length; j++) { final String col = cols[j]; final TextView columsView = new TextView(getApplicationContext()); columsView.setText(String.format("%7s", col)); tableRow.addView(columsView); 
+1
source

This may be helpful for you.

 try{ JSONArray jArray = new JSONArray(result); TableLayout tv=(TableLayout) findViewById(R.id.table); tv.removeAllViewsInLayout(); int flag=1; // when i=-1, loop will display heading of each column // then usually data will be display from i=0 to jArray.length() for(int i=-1;i<jArray.length();i++){ TableRow tr=new TableRow(Yourclassname.this); tr.setLayoutParams(new LayoutParams( LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT)); // this will be executed once if(flag==1){ TextView b3=new TextView(Yourclassname.this); b3.setText("column heading 1"); b3.setTextColor(Color.BLUE); b3.setTextSize(15); tr.addView(b3); TextView b4=new TextView(Yourclassname.this); b4.setPadding(10, 0, 0, 0); b4.setTextSize(15); b4.setText("column heading 2"); b4.setTextColor(Color.BLUE); tr.addView(b4); TextView b5=new TextView(Yourclassname.this); b5.setPadding(10, 0, 0, 0); b5.setText("column heading 3"); b5.setTextColor(Color.BLUE); b5.setTextSize(15); tr.addView(b5); tv.addView(tr); final View vline = new View(Yourclassname.this); vline.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 2)); vline.setBackgroundColor(Color.BLUE); tv.addView(vline); // add line below heading flag=0; } else { JSONObject json_data = jArray.getJSONObject(i); TextView b=new TextView(Yourclassname.this); String str=String.valueOf(json_data.getInt("column1")); b.setText(str); b.setTextColor(Color.RED); b.setTextSize(15); tr.addView(b); TextView b1=new TextView(Yourclassname.this); b1.setPadding(10, 0, 0, 0); b1.setTextSize(15); String str1=json_data.getString("column2"); b1.setText(str1); b1.setTextColor(Color.WHITE); tr.addView(b1); TextView b2=new TextView(Yourclassname.this); b2.setPadding(10, 0, 0, 0); String str2=String.valueOf(json_data.getInt("column3")); b2.setText(str2); b2.setTextColor(Color.RED); b2.setTextSize(15); tr.addView(b2); tv.addView(tr); final View vline1 = new View(Yourclassname.this); vline1.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.FILL_PARENT, 1)); vline1.setBackgroundColor(Color.WHITE); tv.addView(vline1); // add line below each row } } }catch(JSONException e){ Log.e("log_tag", "Error parsing data " + e.toString()); Toast.makeText(getApplicationContext(), "JsonArray fail", Toast.LENGTH_SHORT).show(); } 
+8
source

It depends. If you are sure that you will have only a few rows, you can inflate them by adding them to the loop in TableLayout. But note that you are creating a view for each row.

With a lot of data, create a ListView and an adapter, for example, based on the CursorAdapter:

 public class MyCursorAdapter extends CursorAdapter { private static final String TAG = "MyCursorAdapter"; private final int NAME_COLUMN; private final int ADDRESS_COLUMN; private final int STATE_COLUMN; public MyCursorAdapter(Context context, Cursor c) { super(context, c); NAME_COLUMN = c.getColumnIndexOrThrow("name"); ADDRESS_COLUMN = c.getColumnIndexOrThrow("address"); } @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { LayoutInflater inflater = LayoutInflater.from(context); View view = inflater.inflate(R.layout.custom_row, null); MyRowViewHolder rowData = new MyRowViewHolder(); rowData.name = (TextView) view.findViewById(R.id.name); rowData.address = (TextView) view.findViewById(R.id.address); rowData.name.setText(cursor.getString(NAME_COLUMN)); rowData.address.setText(cursor.getString(ADDRESS_COLUMN)); view.setTag(rowData); return view; } @Override public void bindView(View view, Context context, Cursor cursor) { MyRowViewHolder rowData = (MyRowViewHolder) view.getTag(); rowData.name.setText(cursor.getString(NAME_COLUMN)); rowData.address.setText(cursor.getString(ADDRESS_COLUMN)); } public static class MyRowViewHolder { TextView name; TextView address; } } 

This approach does not create a view for each row. I think this is better, but more effort is needed. To get the table style, use LinearLayout for rows with layout_weight for columns

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content"> <TextView android:id="@+id/name" android:layout_weight="0.25" android:layout_width="0" android:layout_height="wrap_content"> </TextView> <TextView android:id="@+id/address" android:layout_weight="0.75" android:layout_width="0" android:layout_height="wrap_content"> </TextView> </LinearLayout> 

In the ListView, add a header and footer if you want.

+4
source

I see that this post is quite old, but if someone else is faced with the problem of displaying user data in a table on Android, I would like to offer me TableView as a possible solution for this.
Thus, you do not care about how to fill in the data in your table, you can simply create a custom adapter for the data that you want to show (as we already know in Android from such representations as ListView).

our code will look like this:

 List<Flight> myData = new ArrayList<>(); myData.add(new Flight(...)); myData.add(new Flight(...)); myData.add(new Flight(...)); TableView<Flight> table = findViewById(R.id.table); table.setHeaderAdapter(new SimpleHeaderAdapter("Time", "Airline", "Flight", "Destination")); table.setDataAdapter(new FlightDataAdapter(myData)); 

The result may look like this:

Example

+1
source

Staticity can be used when you have a certain unchanging number of rows / columns in the table that you want to populate. Otherwise, I suggest using a loop and adding a row to the table view for each step in your loop.

0
source

We could introduce a custom component for android: TableView.

Its code will look something like this:

 public class TableView extends TableLayout { public TableView(Context context, AttributeSet attrs) { super(context, attrs); } public TableView(Context context) { super(context); } public void setAdapter(TableAdapter<?> adapter) { removeAllViews(); for (int row = 0; row < adapter.getRowCount(); row++) { TableRow tableRow = new TableRow(getContext()); TableLayout.LayoutParams params = new TableLayout.LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); tableRow.setLayoutParams(params); addView(tableRow); for (int column = 0; column < adapter.getColumnCount(); column++) { View cell = adapter.getView(row, column); tableRow.addView(cell); TableRow.LayoutParams cellParams = (android.widget.TableRow.LayoutParams) cell.getLayoutParams(); cellParams.weight = adapter.getColumnWeight(column); cellParams.width = 0; } } } } 

And he will use such an adapter:

 public interface TableAdapter<T> { int getRowCount(); int getColumnWeight(int column); int getColumnCount(); T getItem(int row, int column); View getView(int row, int column); } 
0
source

All Articles