当我更改页面方向时,它会出现在页面的开头

时间:2017-06-05 07:30:11

标签: java android sharedpreferences pdf-reader

我正在使用barteksc-AndroidPdfViewer。我正在使用此代码

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) {
    }
}

更改页面的方向。但是,当我们开始观景时,如果我必须假设肖像模式和第15页页面方向改变页面方向。

enter image description here enter image description here

SharedPreferences无效。它不能记录我们所在的最后一页。请帮助我这方面,请帮帮我。

1 个答案:

答案 0 :(得分:0)

不要使用SharePreferences。当您更改屏幕方向时,系统会再次调用onCreate()方法并重新绘制视图。要解决此问题,您有两种方法。第一个是强制在清单文件中保存状态。

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

如果编写此参数无需在Activity中处理,框架将处理其余的事情。如果方向改变,它将保持屏幕或布局的状态。

谷歌开发者推荐另一种方式,这是处理方向更改中的这个问题的更好方法。您可以在此link中获取更多信息。阅读此article也会更好。它是关于活动的生命周期。

如果您想要源代码示例,我可以与您分享我的来源。 Enjoy!

要处理方向更改,请在源中添加以下几行。

    Configurator.onRender(new OnRenderListener() {
    @Override
    public void onInitiallyRendered(int pages, float pageWidth, float pageHeight) {
        pdfView.fitToWidth(); // optionally pass page number
    }
});