问题描述
我正在 Android Studio 中开发 Pdf 阅读器 Android 应用程序,但我不知道如何在 History Fragment 中打开与我的 Pdf 文件完全相同的页面。 我使用了 Viewpager2,其中包含三个单独的选项卡(文档、历史、收藏夹)用于我的片段。每当我单击文档片段中的 Pdf 文件时,它都会被添加到历史片段 pdf 列表中,但问题是当我在历史片段中打开 pdf 时它打开我的 pdf 文件的第一页。我希望每当我点击我的历史片段中的 pdf 文件时,它应该打开我在我的文档片段中阅读的同一页,如果我滚动到我的历史片段 Pdf 文件中的其他页面然后在我的文档片段中,如果我打开同一个文件,它应该打开历史片段 Pdf 文件的最后查看页面。
这是我的 ViewPdf.java 的代码:
public class ViewPdf extends AppCompatActivity {
public static PDFView pdfView;
static int pagenumber;
TextView textView;
BottomNavigationView bottomNavigationView;
SharedPreferences mprefs;
SharedPreferences mprefsk;
SharedPreferences sharedPreference;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pdf);
pdfView = findViewById(R.id.pdfView);
pdfView.setVisibility(View.VISIBLE);
loadData();
textView = (TextView) findViewById(R.id.pagenumber);
pdfView.fromFile(DocumentsFragment.pdf.get(getIntent().getIntExtra("Position",-1)))
.enableAnnotationRendering(true)
.defaultPage(pagenumber)
.swipeHorizontal(true)
// .scrollHandle(new DefaultScrollHandle(ViewPdf.this))
.nightMode(true)
.fitEachPage(true)
.onPageChange(new OnPagechangelistener() {
@Override
public void onPageChanged(int page,int pageCount) {
pagenumber = page;
textView.setText(String.valueOf(pdfView.getCurrentPage() + 1) + "/" + pdfView.getPageCount());
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
public void saveData() {
pagenumber = pdfView.getCurrentPage();
sharedPreference = getPreferences(MODE_PRIVATE);
editor = sharedPreference.edit();
editor.putInt("page",pagenumber);
editor.apply();
}
public void loadData() {
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
pagenumber = sharedPreferences.getInt("page",MODE_PRIVATE);
}
这是我的 ViewHistoryPdf.java:
public class ViewHistoryPdf extends AppCompatActivity {
PDFView pdfView;
int pagenumber;
TextView textView;
BottomNavigationView bottomNavigationView;
SharedPreferences mprefs;
SharedPreferences mprefsk;
SharedPreferences sharedPreference;
SharedPreferences.Editor editor;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_view_pdf);
pdfView = findViewById(R.id.pdfView);
//recyclerView.setVisibility(View.GONE);
pdfView.setVisibility(View.VISIBLE);
loadData();
textView = (TextView) findViewById(R.id.pagenumber);
pdfView.fromFile(HistoryFragment.pdfHistory.get(getIntent().getIntExtra("History",-1)))
.enableAnnotationRendering(true)
.defaultPage(pagenumber)
.swipeHorizontal(true)
// .scrollHandle(new DefaultScrollHandle(ViewPdf.this))
.nightMode(true)
.fitEachPage(true)
.onPageChange(new OnPagechangelistener() {
@Override
public void onPageChanged(int page,int pageCount) {
pagenumber = page;
textView.setText(String.valueOf(pdfView.getCurrentPage() + 1) + "/" + pdfView.getPageCount());
}
})
.pageSnap(true) // snap pages to screen boundaries
.pageFling(true)
.autoSpacing(false)
.spacing(12)
.enableAntialiasing(true)
.pageFitPolicy(FitPolicy.BOTH)
.load();
public void saveData() {
pagenumber=pdfView.getCurrentPage();
sharedPreference = getPreferences(MODE_PRIVATE);
editor = sharedPreference.edit();
editor.putInt("page",pagenumber);
editor.apply();
}
public void loadData() {
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
pagenumber = sharedPreferences.getInt("page",MODE_PRIVATE);
}
解决方法
假设您的 saveData()
和 loadData()
有效(我没有看到这些方法被调用的位置)。您可以拨打:
pdfView.jumpTo(pagenumber)
记住pagenumber
应该有正确的页码