public class FolioPageFragmentAdapter extends FragmentStatePagerAdapter{
private List<SpineReference> mSpineReferences;
private Book mBook;
private String mEpubFileName;
private boolean mIsSmilAvailable;
private FolioPageFragment mFolioPageFragment;
public FolioPageFragmentAdapter(FragmentManager fm, List<SpineReference> spineReferences,
Book book, String epubFilename, boolean isSmilAvilable) {
super(fm);
this.mSpineReferences = spineReferences;
this.mBook = book;
this.mEpubFileName = epubFilename;
this.mIsSmilAvailable = isSmilAvilable;
}
@Override
public Fragment getItem(int position) {
mFolioPageFragment = FolioPageFragment.newInstance(position, mBook, mEpubFileName, mIsSmilAvailable);
return mFolioPageFragment;
}
@Override
public int getCount() {
return mSpineReferences.size();
}
public FolioPageFragment getCurrentFragment(){
return mFolioPageFragment;
}
}
It doesn't give me the correct current fragment.
有没有什么方法可以让我获得当前的片段。 我已将FragmentPagerAdapter更改为FragmentStatePagerAdapter。 以下方法不提供当前片段。 创建实例的外推时间我将它存储在全局变量中仍然不适用于我。
private Fragment getFragment(int pos) {
return getSupportFragmentManager().
findFragmentByTag("android:switcher:" + R.id.folioPageViewPager + ":" + (pos));
}
答案 0 :(得分:1)
这可能不起作用,因为getItem()可以返回下一个/上一个片段。尝试制作片段数组,存储创建的片段并从数组当前检索。
答案 1 :(得分:1)
问题在于FragmentStatePagerAdapter
的装载量与您预期的装载量不同。
加载并设置position
后,它会加载:position - 1
处的片段,position
处的片段,position + 1
处的片段。因此,在您的情况下,全局变量将片段保存在position+1
。
滑动时,最后加载的片段将为position - 1
或position + 1
,具体取决于滚动方向。
你应该做的是保持一个HashMap
的位置&amp;那个位置的片段。然后根据当前位置,您将查询HashMap
并返回片段。
您还应检测滑动/页面更改并从HasMap
中删除已销毁的片段,以便它不会继续引用它们,从而导致内存问题。