我如何获得FragmentPageAdapter的当前Fragment

时间:2016-12-12 10:47:44

标签: android fragment fragmentstatepageradapter

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

2 个答案:

答案 0 :(得分:1)

这可能不起作用,因为getItem()可以返回下一个/上一个片段。尝试制作片段数组,存储创建的片段并从数组当前检索。

答案 1 :(得分:1)

问题在于FragmentStatePagerAdapter的装载量与您预期的装载量不同。

  1. 加载并设置position后,它会加载:position - 1处的片段,position处的片段,position + 1处的片段。因此,在您的情况下,全局变量将片段保存在position+1

  2. 滑动时,最后加载的片段将为position - 1position + 1,具体取决于滚动方向。

  3. 你应该做的是保持一个HashMap的位置&amp;那个位置的片段。然后根据当前位置,您将查询HashMap并返回片段。

    您还应检测滑动/页面更改并从HasMap中删除已销毁的片段,以便它不会继续引用它们,从而导致内存问题。