Я полагаю, что проблема заключается в этом разделе кода:
public void generatePDF() {
LayoutInflater inflater = getLayoutInflater();
View pdfLayout = inflater.inflate(R.layout.simple_pdf_example,
findViewById(android.R.id.content),
false);
Весь остальной код использует это раздутое pdfLayout
представление:
LinearLayout linearLayoutView = pdfLayout.findViewById(R.id.linearLayoutView);
for (int i=0; i<10; i++) {
View v = getLayoutInflater().inflate(R.layout.printed_order_element2, null);
linearLayoutView.addView(v);
}
pdfLayout.draw(page.getCanvas());
Проблема в том, что ваше представление pdfLayout
никогда не отображается на экране. Ваш setContentView()
вызов в onCreate()
раздувает другой макет, а надутый pdfLayout
никогда не присоединяется ни к какому представлению!
Когда вы вызываете inflate(int, View, boolean)
и передаете false
в качестве третьего аргумента, вы говорят системе обрабатывать второй аргумент (View
) как родительский только , чтобы проанализировать LayoutParams
на root раздутого макета. Раздутый макет не добавляется к родителю! Вы должны вручную вызвать parent.addView()
с раздутым видом.
Как это исправить? Трудно сказать точно, так как у меня есть несколько вопросов. Но, возможно, простое задание вопросов покажет ответ.
Странно видеть и вызов setContentView()
и вызов inflate()
, который передается в android.R.id.content
как родитель , Не могли бы вы просто набрать setContentView(R.layout.simple_pdf_example)
в своем onCreate()
и вообще избежать второго inflate()
вызова?
Если это так, то вы заменили бы все вызовы на pdfLayout.findViewById()
на прямые findViewById()
вызовы ( поскольку то, что раньше было pdfLayout
, теперь является основным содержанием вашей деятельности.