セルごとに異なる列幅のテーブルを作成する必要があります。〜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 です。そして問題は、ダイアログが表示されることですが、フリーズし、すべての行ではなく、1回、2回だけ更新されます。もちろん、完全に機能しているよりも onProgressUpdate メソッドで addView をスキップすると、進行状況は継続します。バックグラウンドで行を追加できないので、解決策は何ですか?