Fragment 中嵌套Fragment,更新數據,UI

在做項目的時候,功能是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);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章