android动态表格数据,java – 动态填充Android表格布局的数据

该博客讨论了在Android应用中尝试从SQLite数据库检索数据并将其显示在TableLayout时遇到的问题。作者的代码能成功获取数据,但在TableLayout中不显示。问题可能在于循环逻辑或布局参数设置。解决方案涉及检查TextView的添加和布局参数配置,以及可能的异常处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试将从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中或显示任何错误消息.我想知道为什么会这样.

编辑部分

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

}

}

编辑部分

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;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值