RecycleView 在 PDF (PdfDocument) 中不可见
RecycleView not visible in PDF (PdfDocument)
我正在尝试将 RecycleView 添加到 PDF 文档,但它是不可见的。我针对 Activity 中的 RecycleView
测试了 StatisticsViewHolder
和 StatisticsAdapter
,它起作用了,所以我确信问题出在设置 RecycleView
或 pdf_layout.xml 上。
此外,我正在正确设置 PDF 文档,因为 RecycleView
是我的 pdf_layout.xml
中唯一没有显示的元素(为了简单起见,我删除了其他元素)。
正在设置 RecycleView
:
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(2250, 1400, 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
LayoutInflater inflater = (LayoutInflater)
getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View content = inflater.inflate(R.layout.pdf_layout, null);
int measureWidth = View.MeasureSpec.makeMeasureSpec(page.getCanvas().getWidth(), View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(page.getCanvas().getHeight(), View.MeasureSpec.EXACTLY);
content.measure(measureWidth, measuredHeight);
content.layout(0, 0, page.getCanvas().getWidth(), page.getCanvas().getHeight());
RecyclerView recyclerViewPdf = content.findViewById(R.id.recyclerViewPDF);
recyclerViewPdf.setHasFixedSize(true);
double[] statistics = new double[]{0, 0, 0, 0, 0, 0};
recyclerViewPdf.setLayoutManager(new LinearLayoutManager(getActivity()));
pdfStatisticsAdapter = new StatisticsAdapter(getActivity(), statistics);
recyclerViewPdf.setAdapter(pdfStatisticsAdapter);
content.draw(page.getCanvas());
document.finishPage(page);
pdf_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewPDF"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />
</LinearLayout>
我不确定我是否遗漏了什么,或者 RecycleView
是否不能成为 PdfDocument
中 pdf_layout 的一部分
事实证明问题出在设置适配器上。
我将我的适配器设置在 "main" 线程之外,导致以下错误(乍一看我错过了)
No adapter attached; skipping layout
要解决这个问题,移动这部分代码就可以了:
RecyclerView recyclerViewPdf = content.findViewById(R.id.recyclerViewPDF);
recyclerViewPdf.setHasFixedSize(true);
recyclerViewPdf.setLayoutManager(new LinearLayoutManager(getActivity()));
pdfStatisticsAdapter = new StatisticsAdapter(getActivity(), statistics);
recyclerViewPdf.setAdapter(pdfStatisticsAdapter);
由"main"线程调用的函数(例如onCreate
)或通过创建可用于post主线程的Handler
。
我正在尝试将 RecycleView 添加到 PDF 文档,但它是不可见的。我针对 Activity 中的 RecycleView
测试了 StatisticsViewHolder
和 StatisticsAdapter
,它起作用了,所以我确信问题出在设置 RecycleView
或 pdf_layout.xml 上。
此外,我正在正确设置 PDF 文档,因为 RecycleView
是我的 pdf_layout.xml
中唯一没有显示的元素(为了简单起见,我删除了其他元素)。
正在设置 RecycleView
:
PdfDocument document = new PdfDocument();
PdfDocument.PageInfo pageInfo = new PdfDocument.PageInfo.Builder(2250, 1400, 1).create();
PdfDocument.Page page = document.startPage(pageInfo);
LayoutInflater inflater = (LayoutInflater)
getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View content = inflater.inflate(R.layout.pdf_layout, null);
int measureWidth = View.MeasureSpec.makeMeasureSpec(page.getCanvas().getWidth(), View.MeasureSpec.EXACTLY);
int measuredHeight = View.MeasureSpec.makeMeasureSpec(page.getCanvas().getHeight(), View.MeasureSpec.EXACTLY);
content.measure(measureWidth, measuredHeight);
content.layout(0, 0, page.getCanvas().getWidth(), page.getCanvas().getHeight());
RecyclerView recyclerViewPdf = content.findViewById(R.id.recyclerViewPDF);
recyclerViewPdf.setHasFixedSize(true);
double[] statistics = new double[]{0, 0, 0, 0, 0, 0};
recyclerViewPdf.setLayoutManager(new LinearLayoutManager(getActivity()));
pdfStatisticsAdapter = new StatisticsAdapter(getActivity(), statistics);
recyclerViewPdf.setAdapter(pdfStatisticsAdapter);
content.draw(page.getCanvas());
document.finishPage(page);
pdf_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewPDF"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:scrollbars="vertical" />
</LinearLayout>
我不确定我是否遗漏了什么,或者 RecycleView
是否不能成为 PdfDocument
事实证明问题出在设置适配器上。 我将我的适配器设置在 "main" 线程之外,导致以下错误(乍一看我错过了)
No adapter attached; skipping layout
要解决这个问题,移动这部分代码就可以了:
RecyclerView recyclerViewPdf = content.findViewById(R.id.recyclerViewPDF);
recyclerViewPdf.setHasFixedSize(true);
recyclerViewPdf.setLayoutManager(new LinearLayoutManager(getActivity()));
pdfStatisticsAdapter = new StatisticsAdapter(getActivity(), statistics);
recyclerViewPdf.setAdapter(pdfStatisticsAdapter);
由"main"线程调用的函数(例如onCreate
)或通过创建可用于post主线程的Handler
。