首页 > 解决方案 > 如何恢复在 PDF 视图中加载的最后一页?

问题描述

我是一名初学者开发人员,这是我的第一个问题帖子。

我的应用程序提供了一本 PDF 电子书,我使用了这个库:

com.github.barteksc:android-pdf-viewer:2.8.2

当我重新打开我的应用程序时,pdfView 加载第一页“pageNumber=0”,我希望它加载我离开它的最后一页。

我发现在 SO 上针对这个问题提出了大多数解决方案,但对我没有任何帮助。

我认为有一个简单的解决方案,例如使用:

SavedPage = pdfView.getCurrentPage()里面onSavedInstanceState,然后恢复里面的整数onCreate

但我不知道该怎么做。因此,请您指导我使用最简单的方法让我的 pdfView 加载我正在阅读的最后一页。

这是我的阅读活动的代码:

package com.turquoise.jeebalalhasanat;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;
import java.util.List;

public class ReadingActivity extends Activity implements OnPageChangeListener,OnLoadCompleteListener {

    private static final String TAG = ReadingActivity.class.getSimpleName();
    public static final String PDF_FILE = "my_book.pdf";

    PDFView pdfView ;
    Integer pageNumber;
    String pdfFileName;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reading);

        pdfView = (PDFView)findViewById(R.id.pdfView);
        displayFromAsset(PDF_FILE);
    }

    private void displayFromAsset(String assetFileName) {
        pdfFileName = assetFileName;

        pdfView.fromAsset(PDF_FILE)
                .defaultPage(pageNumber)
                .enableSwipe(true)
                .swipeHorizontal(false)
                .onPageChange(this)
                .enableAnnotationRendering(true)
                .onLoad(this)
                .scrollHandle(new DefaultScrollHandle(this))
                .load();
        }

    @Override
    public void onPageChanged(int page, int pageCount) {

        pageNumber = page;
        setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));

    }

    @Override
    public void loadComplete(int nbPages) {
        PdfDocument.Meta meta = pdfView.getDocumentMeta();
        printBookmarksTree(pdfView.getTableOfContents(), "-");

    }

    public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
        for (PdfDocument.Bookmark b : tree) {

            Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

            if (b.hasChildren()) {
                printBookmarksTree(b.getChildren(), sep + "-");
            }
        }
    }

任何帮助表示赞赏!

标签: pdfview

解决方案


感谢上帝,我找到了解决方案!谷歌的 Android 开发者文档仍将是开发者最好的朋友。

我想分享它,以帮助每个在此问题上需要帮助的初学者开发人员。

所以这里是如何恢复您在 PDF 视图中加载的最后一页: 第一步:在您的活动中声明一个整数变量:

Integer savedPage;

第二步:在 onStop() 内部:

@Override
protected void onStop() {
    super.onStop();


savedPage = pdfView.getCurrentPage();

\\ create a shared preference file

    SharedPreferences mySharedPreferences = getPreferences(Context.MODE_PRIVATE);


\\ to write to this shared preference file

    SharedPreferences.Editor myEditor = mySharedPreferences.edit();



\\ store the page number you left it 

    myEditor.putInt("retrievedPage",savedPage);



\\ to save changes

 myEditor.apply();



}

第三步:在 onCreate() 内部:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_reading);


\\ To retrieve the  number of the last page from your shared preferences file

 SharedPreferences mySharedPreferences = getPreferences(Context.MODE_PRIVATE);

savedPage = mySharedPreferences.getInt("retrievedPage",0);

    pageNumber = savedPage;
}

这是完整的活动代码:

import android.os.Bundle;
import android.util.Log;
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.scroll.DefaultScrollHandle;
import com.shockwave.pdfium.PdfDocument;
import java.util.List;






public class ReadingActivity extends Activity  implements OnPageChangeListener,OnLoadCompleteListener {


    private static final String TAG = ReadingActivity.class.getSimpleName();
    public static final String PDF_FILE = "my_book.pdf";


    PDFView pdfView ;
    Integer pageNumber;
    String pdfFileName;

Integer currentPageNumber;
Integer savedPage;







    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_reading);






SharedPreferences mySharedPreferences = getPreferences(Context.MODE_PRIVATE);

savedPage = mySharedPreferences.getInt("retrievedPage",0);

pageNumber = savedPage;







        pdfView = (PDFView)findViewById(R.id.pdfView);
        displayFromAsset(PDF_FILE);


    }










    private void displayFromAsset(String assetFileName) {
        pdfFileName = assetFileName;

        pdfView.fromAsset(PDF_FILE)
                .defaultPage(pageNumber)
                .enableSwipe(true)
                .swipeHorizontal(false)
                .onPageChange(this)
                .enableAnnotationRendering(true)
                .onLoad(this)
                .scrollHandle(new DefaultScrollHandle(this))
                .load();




        }





    @Override
    public void onPageChanged(int page, int pageCount) {

        pageNumber = page;
        setTitle(String.format("%s %s / %s", pdfFileName, page + 1, pageCount));

            }




    @Override
    public void loadComplete(int nbPages) {
        PdfDocument.Meta meta = pdfView.getDocumentMeta();
        printBookmarksTree(pdfView.getTableOfContents(), "-");

    }


    public void printBookmarksTree(List<PdfDocument.Bookmark> tree, String sep) {
        for (PdfDocument.Bookmark b : tree) {

            Log.e(TAG, String.format("%s %s, p %d", sep, b.getTitle(), b.getPageIdx()));

            if (b.hasChildren()) {
                printBookmarksTree(b.getChildren(), sep + "-");
            }
        }
    }



@Override
protected void onStop() {
    super.onStop();

    SharedPreferences mySharedPreferences = getPreferences(Context.MODE_PRIVATE);
    SharedPreferences.Editor myEditor = mySharedPreferences.edit();


savedPage = pdfView.getCurrentPage();
myEditor.putInt("retrievedPage",savedPage);
myEditor.apply();


}

}

现在你应该实现你的目标。快乐编码^^!


推荐阅读