Android Java Заполняет TableRow динамически не работает - PullRequest
0 голосов
/ 03 октября 2018

У меня возникли проблемы при попытке динамического заполнения TableRow.То, что я пытаюсь сделать, это когда я нажимаю кнопку экспорта, я компилирую верхний и нижний колонтитулы, а затем содержимое, после того как они сделаны, я продолжаю экспортировать в PDF.

Я заполнил свой TableLayout следующим кодом в compileContent ():

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 (), поскольку напечатанное сообщение, которое я установил для цикла, не печатается.Есть идеи, почему это так?Почему tableRow не отображается, когда есть данные?

Спасибо заранее!

1 Ответ

0 голосов
/ 03 октября 2018

Если я правильно понимаю, то, что вы делаете, это обновление макетов и преобразование макетов в PDF с помощью пользовательского класса.Обновление макетов означает обновление пользовательского интерфейса, которое обычно не завершается немедленно, поскольку обновления пользовательского интерфейса ставятся в очередь и будут выполняться позже в потоке пользовательского интерфейса.(Вот почему, когда ваше устройство занято и тормозит, пользовательский интерфейс не обновляется достаточно быстро)

Раздуваемая вами TableRow может не завершиться, когда вы создаете PDF из-за того, как работает возбудитель Android.Вы можете использовать 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();
    }
}
...