2011-02-11 95 views
7

我想从我的android table view中获取database的数据。在android的桌面视图中显示数据

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

+0

你是什么意思的 “静态”? – WarrenFaith 2011-02-11 11:23:41

+0

TextView value3 =(TextView)findViewById(R.id。值3); \t \t \t \t \t \t value3.setText(k2);那种代码..形式静态是必要的? – Siten 2011-02-11 11:33:31

+0

问清楚.. – Ads 2011-02-11 11:35:41

回答

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

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

4

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

随着大量数据的创建例如基于CursorAdapter的ListView和适配器:

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

这种方法不创建视图的每一行。我认为这更好,但需要更多的努力。为了让表的布局风格使用的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,如果你想添加页眉和页脚。

0

我们可以想象一个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); 
} 
8

这可能对您有用..

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

我看到这篇文章是相当古老的,但如果别人也面临着在Android中的表中显示自定义数据的问题,我愿意e提供我的TableView作为可能的解决方案。
所以你不关心如何把数据填到表,你可以简单地创建一个自定义的适配器你想显示(就像我们已经在Android的意见,从类似的ListView知道)的数据。

我们的代码看起来像这样:

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

结果看起来是这样的:

Example