我需要创建一个表格,每个单元格都有不同的列宽。我有约 20 行和 60-80 列。这是我的代码:
private void generatingRows() {
new AsyncTask<Void,View,Void>() {
private ProgressDialog dialog;
private int progress = 0;
@Override
protected void onPreExecute() {
// Clear table
table.removeAllViews();
// Show peogress dialog
dialog = new ProgressDialog(MyActivity.this);
dialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
dialog.setMessage("Loading");
dialog.setCancelable(false);
dialog.setMax(data.size);
dialog.setProgress(0);
dialog.show();
}
@Override
protected Void doInBackground(Void... params) {
for (final RowData rowData : data) {
// Create row
LinearLayout row = new LinearLayout(MyActivity.this);
row.setOrientation(LinearLayout.HORIZONTAL);
// Add columns
for (int i = 0; i < rowData.columns.size(); i++) {
// Get column values
final ColumnData columnData = rowData.columns.get(i);
// Get view
final View column = layoutInflater.inflate(R.layout.column, null);
// Set values
MyActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
TextView.class.cast(column.findViewById(R.id.title)).setText(columnData.title);
}
});
// Add into row
row.addView(column);
}
// Update
progress++;
publishProgress(new View[] {channelItem, showRow });
}
return null;
}
@Override
protected void onProgressUpdate(View... resultViews){
dialog.setProgress(progress);
table.addView(resultViews[0]);
}
@Override
protected void onPostExecute(Void aVoid) {
dialog.dismiss();
}
}.execute();
}
“表格”视图是具有垂直方向的 LinearLayout。问题是出现了对话框,但冻结,只更新一次,两次,而不是每一行。当然,如果我跳过 onProgressUpdate 方法中的 addView 而不是完美地工作,那么进度是连续的。而且我无法在后台添加行,那么解决方案是什么?