標籤:
在使用ViewPager+FragmentPagerAdapter時候,更新Fragment裡資料是不起作用,FragmentPagerAdapter添加或減少Fragment時,前面的Fragment內容更新不起作用等等問題,有的做法是暴力刪除fragment列表,如
List<Fragment> fragments = getSupportFragmentManager().getFragments();for (int i = fragments.size() - 1; i >= 0; i--) { getSupportFragmentManager().beginTransaction().remove(fragments.get(0));}
也有做法是重寫FragmentPagerAdapter的instantiateItem(ViewGroup container, int position)方法等等,有效雖有效,但比較粗爆。
FragmentPagerAdapter.getItem(int position)在更新時候不一定會被調用,所以Fragment更新是無效,來看看FragmentPagerAdapter的父類PagerAdapter中的代碼instantiateItem
FragmentPagerAdapter裡在根據getItemId(int position)來判斷當前position裡Fragment是否存在,如果存在,則不會建立亦不會更新,那麼要讓FragmentPagerAdapter的更新生效,那在getItemId(int)雷根據資料返回一個唯一的資料ID,當FragmentPagerAdapter更新時,資料ID改變了,那麼Fragment就會調用getItem(int)去擷取新Fragment,達到更新效果
@Overridepublic long getItemId(int position) { // 擷取當前資料的hashCode int hashCode = mData.get(position).hashCode(); return hashCode;}
Android FragmentPagerAdapter 更新資料