我想显示一页的pdf文件从一个片段使用viewpager2。因此,每页滚动,我将从文件加载一个PDFView。因此,如果我有6个pdf文件,我将存储在一个数组中的pdf文件,并将它们组合在一个pdfview中,使用每个pdf文件的每个片段。
问题是:
当我滚动时,它不能正确地加载和显示。如果我滚动从第1-6页,它正确地显示在第一个滚动左到右。但是当我回去的时候,它会显示,不会在某些页面上显示。这是我的代码:这是我的MainActivity.java
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
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
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布局
<?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>
发布于 2020-10-22 12:32:38
我也有同样的问题,当我滚动到另一个碎片时,碎片正在被破坏。保留碎片
pager.offscreenPageLimit = 3 // The number of fragments which should be kept
-3,-2,-1,当前,1,2,3
如果你设定3,最多。视图页将在两边保留3个片段。
https://stackoverflow.com/questions/62643982
复制相似问题