动态填充数据的Android表布局



我试图加载数据检索从SQLite数据库到Android tableLayout。下面是我的代码:

TableLayout table_layout;
private SQLiteDatabase mDb;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.tabhost);
    new Handler().post(new Runnable() { 
        @Override 
        public void run() { 
            DatabaseAdapter dbAdapter = new DatabaseAdapter(Exercise.this); 
            dbAdapter.createDatabase();
            Exercise.this.mDb =  new DataBaseHelper(Exercise.this).getReadableDatabase();  
            table_layout = (TableLayout) findViewById(R.id.TableLayout);
            BuildTable();
        }
    });
}
private void BuildTable() {
    try {
        String sql = "SELECT exerciseType FROM exercise";
        Cursor mCur = mDb.rawQuery(sql, null);
        if (mCur.getCount() != 0) {
            if (mCur.moveToFirst()) {
                do {
                    int rows = mCur.getCount();
                    int cols = mCur.getColumnCount();
                    // outer for loop
                    for (int i = 0; i < rows; i++) {
                        TableRow row = new TableRow(this);
                        row.setLayoutParams(new LayoutParams(
                                LayoutParams.MATCH_PARENT,
                                LayoutParams.WRAP_CONTENT));
                        // inner for loop
                        for (int j = 0; j < cols; j++) {
                            TextView tv = new TextView(this);
                            tv.setLayoutParams(new LayoutParams(
                                    LayoutParams.WRAP_CONTENT,
                                    LayoutParams.WRAP_CONTENT));
                            tv.setGravity(Gravity.CENTER);
                            tv.setTextSize(18);
                            tv.setPadding(0, 5, 0, 5);
                            tv.setText(mCur.getString(j));
                            row.addView(tv);                            
                        }
                        table_layout.addView(row);
                    }
                } while (mCur.moveToNext());
            }
        }
    } catch (SQLException mSQLException) {
        throw mSQLException;
    }
}

当我打印出mCur.getString(j)时,它确实返回了字符串。但是,它没有出现在tableLayout中,也没有显示任何错误信息。我想知道为什么会这样。

<<p> 编辑部分/strong>
for (int j = 0; j < cols + 1; j++) {
                        TextView tv = new TextView(this);
                        tv.setLayoutParams(new TableRow.LayoutParams(
                                TableLayout.LayoutParams.MATCH_PARENT,
                                LayoutParams.WRAP_CONTENT));
                        tv.setGravity(Gravity.CENTER);
                        tv.setTextSize(18);
                        tv.setPadding(0, 5, 0, 5);
                        tv.setText(mCur.getString(j));
                        row.addView(tv);
                        if(j == cols){
                            CheckBox cb = new CheckBox(this);
                            cb.setLayoutParams(new TableRow.LayoutParams(
                                    TableLayout.LayoutParams.MATCH_PARENT,
                                    LayoutParams.WRAP_CONTENT));
                            cb.setGravity(Gravity.CENTER);
                            cb.setPadding(0, 5, 0, 5);
                            row.addView(cb);
                        }
                    }
<<p> 编辑部分/strong>
private void BuildTable() {
    try {
        String sql = "SELECT * FROM exercise";
        Cursor mCur = mDb.rawQuery(sql, null);
        if (mCur.getCount() != 0) {
            if (mCur.moveToFirst()) {
                TableRow row = new TableRow(this);
                row.setLayoutParams(new LayoutParams(
                        TableLayout.LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT));
                TextView tv1 = new TextView(this);
                tv1.setLayoutParams(new TableRow.LayoutParams(
                        TableLayout.LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT));
                tv1.setGravity(Gravity.LEFT);
                tv1.setTextSize(10);
                tv1.setText("ID");
                row.addView(tv1);
                TextView tv2 = new TextView(this);
                tv2.setLayoutParams(new TableRow.LayoutParams(
                        TableLayout.LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT));
                tv2.setGravity(Gravity.LEFT);
                tv2.setTextSize(10);
                tv2.setText("Exercise Type");
                row.addView(tv2);
                TextView tv3 = new TextView(this);
                tv3.setLayoutParams(new TableRow.LayoutParams(
                        TableLayout.LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT));
                tv3.setGravity(Gravity.LEFT);
                tv3.setTextSize(10);
                tv3.setText("Amount");
                row.addView(tv3);
                TextView tv4 = new TextView(this);
                tv4.setLayoutParams(new TableRow.LayoutParams(
                        TableLayout.LayoutParams.MATCH_PARENT,
                        LayoutParams.WRAP_CONTENT));
                tv4.setGravity(Gravity.LEFT);
                tv4.setTextSize(10);
                tv4.setText("");
                row.addView(tv4);
                do {
                    int cols = mCur.getColumnCount();
                    for (int j = 0; j < cols + 1; j++) {
                        if (j == cols) {
                            CheckBox cb = new CheckBox(this);
                            cb.setLayoutParams(new TableRow.LayoutParams(
                                    TableLayout.LayoutParams.MATCH_PARENT,
                                    LayoutParams.WRAP_CONTENT));
                            cb.setGravity(Gravity.LEFT);
                            row.addView(cb);
                            final int k = j;
                            cb.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View view) {
                                    exerciseIDList.add(Integer.toString(k));
                                }
                            });
                            break;
                        }
                        TextView tv = new TextView(this);
                        tv.setLayoutParams(new TableRow.LayoutParams(
                                TableLayout.LayoutParams.MATCH_PARENT,
                                LayoutParams.WRAP_CONTENT));
                        tv.setGravity(Gravity.LEFT);
                        tv.setTextSize(10);
                        tv.setText(mCur.getString(j));
                        row.addView(tv);
                    }
                    table_layout.addView(row);
                } while (mCur.moveToNext());
            }
        }
    } catch (SQLException mSQLException) {
        throw mSQLException;
    }
}

您没有为您通过编程添加到TableLayout的视图使用适当的LayoutParams。创建的TableRows将被添加到TableLayout中,因此它们的LayoutParams应该是TableLayout类型。LayoutParams:

row.setLayoutParams(new TableLayout.LayoutParams(TableLayout.LayoutParams.MATCH_PARENT, TableLayout.LayoutParams.WRAP_CONTENT));

同样适用于行TextViews,它应该使用TableRow。LayoutParams:

tv.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));

最新更新