尝试动态填充TableRow时遇到一些问题。我想要做的是单击导出按钮时,我将编译页眉,页脚和内容,然后完成操作,然后继续导出为PDF。
我在compileContent()中用以下代码填充了TableLayout:
for (int i = 0; i < allCalibrationList.size(); i++) {
System.out.println("DATA" + allCalibrationList.get(i).getCalibrationName());
TableRow row = (TableRow) getLayoutInflater().inflate(R.layout.template_calibration_report_summary_item, summaryTableLayout, false);
TextView textCol1 = row.findViewById(R.id.row_col1);
TextView textCol2 = row.findViewById(R.id.row_col2);
textCol1.setText(allCalibrationList.get(i).getCalibrationName());
textCol2.setText(getString(R.string.report_not_calibrated_label));
summaryTableLayout.addView(row);
}
contentFinished = true;
点击我的导出按钮时:
@Click(R.id.buttonExport)
void buttonExportClicked(View view) {
FileOutputStream fileOutputStream;
try {
while (!headerFinished && !footerFinished && !contentFinished) {
compileHeader();
compileContent();
compileFooter();
}
// code to generate pdf
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
问题是,当我第一次单击导出按钮时,它进入了compileContent(),并且从我放入for循环中的打印消息中,我设法打印出了数据。但是,tableRow没有显示在导出的PDF中。仅当第二次单击导出按钮时,才会显示tableRow。
但是,当我第二次单击导出按钮时,它没有进入compileContent(),因为我在for循环中设置的已打印消息未打印。任何想法为什么会这样?为什么有数据时tableRow不显示?
感谢进阶!
答案 0 :(得分:0)
如果我正确理解,您正在做的是更新布局,并通过自定义类将布局转换为PDF。更新布局意味着更新UI,通常不会立即完成更新,因为UI更新排队等待排队,稍后将在UI线程上执行。 (这就是为什么当您的设备忙碌而缓慢时,UI的更新速度不够快的原因)
由于Android充气工具的工作原理,您生成的TableRow
可能无法在生成PDF时完成。视图膨胀后,可以使用View.post()运行代码。试试这个:
@Click(R.id.buttonExport)
void buttonExportClicked(View view) {
FileOutputStream fileOutputStream;
try {
if (!headerFinished || !footerFinished || !contentFinished) {
compileHeader();
compileContent();
compileFooter();
}
summaryTableLayout.post(new Runnable(){
@Override
public void run() {
// code to generate pdf
}
})
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}