Android Studio中barteksc PDFView横竖屏切换跳转首页如何解决
问题原因
横竖屏切换属于Android系统的配置变更事件,默认情况下系统会销毁并重建当前Activity,你的代码每次在onCreate生命周期中都会重新加载PDF文件,默认从第1页(对应库的索引0)开始渲染,因此切换后会回到首页。
解决方案
以下两种方案任选其一即可解决问题:
方案1:配置Manifest禁止Activity重建(推荐,操作最简)
直接在项目的AndroidManifest.xml中找到对应Activity的配置,添加configChanges属性,告知系统对应配置变更时不需要销毁重建Activity,PDF的浏览状态会自动保留:
<activity android:name=".Activity2" android:exported="true" android:configChanges="orientation|screenSize|screenLayout|keyboardHidden"> <!-- 你原有Activity的其他配置保持不变 --> </activity>
添加后无需修改其他业务代码即可生效。
方案2:手动保存恢复页码(符合Android生命周期规范)
如果不希望修改Manifest配置,可以通过Activity的状态保存机制,在销毁前记录当前浏览页码,重建时加载PDF直接跳转到对应页码,修改后的Java代码如下:
package com.example.myapplication; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import com.github.barteksc.pdfviewer.PDFView; public class Activity2 extends AppCompatActivity { // 页码保存的键值 private static final String KEY_CURRENT_PAGE = "current_page"; PDFView book1; // 存储当前浏览页码,库的页码从0开始计数,默认第一页为0 private int currentPage = 0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_2); book1 = (PDFView)findViewById(R.id.pdfView); // 重建时恢复之前保存的页码 if (savedInstanceState != null) { currentPage = savedInstanceState.getInt(KEY_CURRENT_PAGE, 0); } book1.fromAsset("Problems-of-Life-and-Mind.-Second-series.pdf") .spacing(10) // 加载PDF时指定跳转的页码 .defaultPage(currentPage) .load(); } @Override protected void onSaveInstanceState(Bundle outState) { // Activity销毁前保存当前浏览页码 currentPage = book1.getCurrentPage(); outState.putInt(KEY_CURRENT_PAGE, currentPage); super.onSaveInstanceState(outState); } }
内容的提问来源于stack exchange,提问作者Sojol Rabby
相关产品推荐
相关产品推荐

