0

I am using barteksc-AndroidPdfViewer. I am using this code

package com.epubtest.hxfy.epubtest;

import android.content.Context;
import android.content.SharedPreferences;
import android.graphics.Canvas;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;    
import com.github.barteksc.pdfviewer.PDFView;
import com.github.barteksc.pdfviewer.listener.OnDrawListener;
import com.github.barteksc.pdfviewer.listener.OnErrorListener;
import com.github.barteksc.pdfviewer.listener.OnLoadCompleteListener;
import com.github.barteksc.pdfviewer.listener.OnPageChangeListener;
import com.github.barteksc.pdfviewer.listener.OnPageScrollListener;    

public class PDFReaderActivity2 extends AppCompatActivity implements OnPageChangeListener, OnLoadCompleteListener, OnDrawListener, OnErrorListener, OnPageScrollListener {

    private PDFView pdfview;
    private SharedPreferences pdfReader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_pdfreader2);    
        pdfReader = this.getSharedPreferences("PDFReader", Context.MODE_PRIVATE);

        pdfview = (PDFView) findViewById(R.id.pdfView);
        pdfview.fromAsset("test4.pdf")
                .defaultPage(pdfReader.getInt("pages",0))
                .onPageChange(this)
                .swipeHorizontal(false)
                .enableAnnotationRendering(true)
                .scrollHandle(null)
                .onLoad(this)
                .onDraw(this)
                .enableSwipe(true)
                .onError(this)
                .enableDoubletap(true)
                .onPageScroll(this)
                .load();
    }

    @Override
    public void onPageChanged(int page, int pageCount) {
        SharedPreferences.Editor edit = pdfReader.edit();
        edit.putInt("pages",page);
        edit.commit();
    }

    @Override
    public void loadComplete(int nbPages) {

    }    

    @Override
    public void onLayerDrawn(Canvas canvas, float pageWidth, float pageHeight, int displayedPage) {

    }

    @Override
    public void onError(Throwable t) {

    }

    @Override
    public void onPageScrolled(int page, float positionOffset) {
    }
}

to change the orientation of the page. But if I have to assume if the portrait mode and page number 15 in change page orientation of the page when we started the landscape.

enter image description here enter image description here

SharedPreferences is not working. It can't keep record last page where we were. Please help me in this regard, Please help me about this.

Ahmer Afzal
  • 501
  • 2
  • 11
  • 24

1 Answers1

0

Don't use SharePreferences for this. When you change screen orientation, system recalls onCreate() method again and it redraws your views. For solution of this problem, you have 2 ways. First one is forcing to save state in manifest file.

<activity name= ".YourActivity" android:configChanges="orientation|screenSize"/>

If you write this parameter no need to handle in Activity , the framework will take care of rest of things. It will retain the state of the screen or layout if orientation is changed.

Another way is recommended by google developers which is better way for handling this problems in orientation changes. You can get more information in thislink. It will be better for reading this article also. It is about lifecycle of activity.

If you want source example, i can share my source with you. Enjoy!

For handling orientation changes, add this few lines to your source.

    Configurator.onRender(new OnRenderListener() {
    @Override
    public void onInitiallyRendered(int pages, float pageWidth, float pageHeight) {
        pdfView.fitToWidth(); // optionally pass page number
    }
});
JavadKhan
  • 625
  • 6
  • 18
  • @JavedKhan First of all thanks for your reply, `android:configChanges="orientation|screenSize"` works fine but it could not `pdfView.fitToWidth();` If possible please put this method on above code it'll easy implement for me. – Ahmer Afzal Jun 05 '17 at 08:00
  • This library already have this implemented method. Anyway, i'll add this to my answer. @AhmerAfzal – JavadKhan Jun 05 '17 at 08:10
  • Dear I already used this method `pdfView.fitToWidth();` for fit with width, but when I used `android:configChanges="orientation|screenSize"` this it could not implement `pdfView.fitToWidth();` @JavedKhan – Ahmer Afzal Jun 05 '17 at 08:42