在做項目的時候,功能是Fragment中有一個viewpager,viewpager中每一個又都是一個Fragment,記爲fragment1,fragment2,fragment3。
這時fragment2中有一個功能,是點擊裏面的一個button,做一些操作,到返回時,要更新fragment2界面。
關鍵:只需要更新fragment2
查閱一些資料,最後的解決方案記錄如下:
viewpager使用的adapter是繼承自FragmentPagerAdapter
需要重寫其中的instantiateItem方法,重寫如下:
@Override public Object instantiateItem(ViewGroup container, int position) { //得到緩存的fragment Fragment fragment = (Fragment) super.instantiateItem(container, position); //得到tag,這點很重要 String fragmentTag = fragment.getTag();
//因爲固定要更新第二個fragment,所以position固定寫成1,而flag是我寫的更新的標記,默認爲false,如果要更新,則置爲true if (flag && position == 1) { //如果這個fragment需要更新 FragmentTransaction ft = fm.beginTransaction(); //移除舊的fragment ft.remove(fragment); //換成新的fragment,定義成你想要的新的fragment fragment = new MyFragment();; //添加新fragment時必須用前面獲得的tag,這點很重要 ft.add(container.getId(), fragment, fragmentTag); ft.attach(fragment); ft.commitAllowingStateLoss(); } return fragment; }
還有一個一定要注意,一定要重寫getItemPosition,負責還是不會更新
public int getItemPosition(Object object) { if(flag){ return POSITION_NONE; } return super.getItemPosition(object); }