2016-12-12 11 views
1
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に変更しました。 以下のメソッドは、現在のFragmentを与えません。 インスタンスが作成された時刻を取り消します。私はグローバル変数に格納していますが、それでも私のためには機能しません。現在のFragmentPageAdapterのフラグメントを取得する方法

private Fragment getFragment(int pos) { 
     return getSupportFragmentManager(). 
       findFragmentByTag("android:switcher:" + R.id.folioPageViewPager + ":" + (pos)); 
    } 
+0

「makeFragmentName」で答えを確認してください。 [ViewPagerからフラグメントを取得](http://stackoverflow.com/questions/8785221/retrieve-a-fragment-from-a-viewpager) –

答えて

1

getItem()が次の/前のフラグメントを返すため、これはおそらく動作しません。フラグメントの配列を作成し、そこにフラグメントを作成し、配列の現在の値から取得してください。

1

問題は、FragmentStatePagerAdapterには予想していた負荷とは異なることがあります。

それがロードされています
  1. 、それがロードされますposition設定:position - 1のフラグメント、positionのフラグメント、フラグメントをposition + 1にします。したがって、あなたのケースでは、グローバル変数はフラグメントをposition+1に保持します。

  2. 最後に読み込まれたフラグメントは、スクロール方向によってposition - 1またはposition + 1になります。あなたは何をすべき

、その位置のための位置&断片とHashMapを維持することです。次に、現在の位置に基づいてHashMapを照会し、フラグメントを返します。

また、スワイプ/ページの変更を検出し、破損したフラグメントをHasMapから削除する必要があります。そのため、メモリへの参照は保持されません。

関連する問題