獲取viewpager中的fragment

通常來說,咱們再使用viewpager的時候,是在代碼中動態的添加fragment。此時,咱們不能去指定fragment的id,也不能指定他的tag,若是你必定要去指定tag,運行時會提示,tag已經被指定。那麼,在動態的添加了fragment以後,咱們如何能獲取到該fragment並修改其中的內容呢。兩種方法:java

第一種方法其實是一種hack方法,並無官方文檔說明支持。代碼以下android

SomeFragment someFragment  = getSupportFragmentManager().FindFragmentByTag(「android:switcher:」 + R.id.viewpager + 「:0」);

if (someFragment != null) //可能沒有實例化

{

if (someFragment.getView() != null)

{

someFragment.updateView();//自定義方法更新

}

}

這裏要記住的就是」android:switcher:」 + R.id.viewpager + 「:0」 這個字符竄表示的就是該fragment的tag,其中0 是fragment 在viewpager中的位置。code

第二種方法更正規,由於第一種方法對基於FragmentPagerAdapter的實現是有效的,但對於FragmentStatePagerAdapter就無效了。由於FragmentStatePagerAdapter不會對傳給FragmentManager的Fragment設置tag.文檔

ViewPager pager = (ViewPager)findViewById(R.id.viewpager);

FragmentStatePagerAdapter f = pager.getAdapter();

SomeFragment someFragment = (SomeFragment)f.instantiateItem(pager,position);

instantiateItem(pager,position)方法會返回在position位置的fragment的引用。若是該fragment 已經實例化了,再次調用instantiateItem(pager,position)的時候,該方法並不會調用getItem()來再次實例化fragment,而是直接返回引用。get

相關文章
相關標籤/搜索