在Android的表格视图中显示数据

我想从我的android table view database中获取数据。

我应该使用循环? 这是静态的吗?

Solutions Collecting From Web of "在Android的表格视图中显示数据"

这可能对你有用。

 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(); } 

那要看。 如果你确定只有几行,那么你可以将它们循环添加到TableLayout中。 但请注意,您为每一行创build视图。

大量的数据基于CursorAdapter创buildListView和适配器:

 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; } } 

这种方法不会为每一行创build视图。 我认为这样更好,但需要更多的努力。 要获得表格布局样式,请使用LinearLayout作为具有layout_weight列的行

 <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> 

如果你想要ListView添加页眉和页脚。

 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(); 

为此你有XML这个你有一个XML像

 <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> 

在你写的android中显示数据。

  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); 

我看到这个post是相当古老的,但如果别人也面临的问题,以显示自定义数据在Android中的表,我想提供我的TableView作为可能的解决scheme这样做。
因此,您不必关心如何将数据填充到表格中,您可以简单地为要显示的数据创build一个自定义适配器 (就像我们已经从ListView中的视图中了解Android一样)。

我们的代码将如下所示:

 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)); 

结果可能如下所示:

例

当您想要填充的表格中定义的行数/行数永远不变时,可以使用静态。 否则,我build议使用一个循环,并为循环中的每一步添加一行到表视图。

我们可以想象一个android的自定义组件:TableView。

它的代码会是这样的:

 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; } } } } 

它会使用这样的适配器:

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