首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么我的PDFView片段在我的viewpager2中没有正确显示?我似乎不能正确地显示pdfview

为什么我的PDFView片段在我的viewpager2中没有正确显示?我似乎不能正确地显示pdfview
EN

Stack Overflow用户
提问于 2020-06-29 17:53:45
回答 1查看 530关注 0票数 2

我想显示一页的pdf文件从一个片段使用viewpager2。因此,每页滚动,我将从文件加载一个PDFView。因此,如果我有6个pdf文件,我将存储在一个数组中的pdf文件,并将它们组合在一个pdfview中,使用每个pdf文件的每个片段。

问题是:

当我滚动时,它不能正确地加载和显示。如果我滚动从第1-6页,它正确地显示在第一个滚动左到右。但是当我回去的时候,它会显示,不会在某些页面上显示。这是我的代码:这是我的MainActivity.java

代码语言:javascript
运行
复制
  public class MainActivity extends AppCompatActivity {


    private ViewPager2 viewPager;
    private PDF_FragmentAdapter adapter;
    private Context contexts;
    private List<String> list;

    private static final String TAG = MainActivity.class.getSimpleName();

    private final static int REQUEST_CODE = 42;
    public static final int PERMISSION_CODE = 42042;


    private PDFView pdfView;

    private Uri uri;

    private Integer pageNumber = 0;
     private List<String> it;

    String pdfFileName;


    @Override
    protected void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        //--------------  get num of pdf files from assets folder
        AssetManager assetManager = getAssets();
        String[] files = new String[0];
        try {
            files = assetManager.list("pdf");
        } catch (IOException e) {
            e.printStackTrace();
        }
        it = new LinkedList<String>(Arrays.asList(files));
        // System.out.println(it.size());
        for (int i = 0; i < it.size(); i++)
            Log.d("List of files .......", it.get(i).toString());


        // for encrypted pdf files
        viewPager = (ViewPager2) findViewById(R.id.pager);
        adapter = new PDF_FragmentAdapter(getSupportFragmentManager(),this.getLifecycle(),it); //pass pdf file name array
        viewPager.setOrientation(viewPager.ORIENTATION_HORIZONTAL);
        viewPager.setAdapter(adapter);
    }

}

这是我的Pdf_FragmentAdapter.java

代码语言:javascript
运行
复制
public class PDF_FragmentAdapter extends FragmentStateAdapter  {

    private List<String> List;

    SparseArray<Fragment> registeredFragments = new SparseArray<>();


    public PDF_FragmentAdapter( @NonNull FragmentManager fm, @NonNull Lifecycle lifecycle,  List<String> arrayList) {
        super(fm,lifecycle);
        this.List = arrayList;
    }


    @NonNull
    @Override
    public Fragment createFragment(int position) {
        Fragment pdf_fragment = newInstance(List.get(position));
        registeredFragments.put(position,pdf_fragment);
        return registeredFragments.get(position);
    }


    @Override
    public int getItemCount() {
        return List.size();
    } 
}

这是我的PDF_Fragment.java

代码语言:javascript
运行
复制
    public class PDF_Fragment extends Fragment {

    private PDFView pdfViewer;

    private View.OnScrollChangeListener onScrollChangeListener;
    private OnPageChangeListener onPageChangeListener;
    private Fragment fragment;
    private int pageNumber =0;
    private String pdfFileName;


    public static PDF_Fragment newInstance(String filename) {

        PDF_Fragment fragment = new PDF_Fragment();
        Bundle args = new Bundle();
        args.putString("someMessage", filename);
        fragment.setArguments(args);
        return fragment;
    }


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view =  inflater.inflate(R.layout.fragment_pdf, container, false);
        pdfFileName = getArguments().getString("someMessage");

        return view;
    }


    @Override public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        PDFView pdfViewer = (PDFView) view.findViewById(R.id.pdfView);

        pdfViewer.fromAsset("pdf/" + pdfFileName)
                .load();

    }
}

这是我的片段xml布局

代码语言:javascript
运行
复制
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".PDF_Fragment">

        <com.github.barteksc.pdfviewer.PDFView
        android:id="@+id/pdfView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>

这是我的日志在滚动查看器时的样子。

EN

回答 1

Stack Overflow用户

发布于 2020-10-22 12:32:38

我也有同样的问题,当我滚动到另一个碎片时,碎片正在被破坏。保留碎片

代码语言:javascript
运行
复制
pager.offscreenPageLimit = 3 // The number of fragments which should be kept

-3,-2,-1,当前,1,2,3

如果你设定3,最多。视图页将在两边保留3个片段。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62643982

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档