Fragment 中嵌套Fragment,更新数据,UI

来源:互联网 发布:ib网络 跟以太网区别 编辑:程序博客网 时间:2024/05/18 19:39

在做项目的时候,功能是Fragment中有一个viewpager,viewpager中每一个又都是一个Fragment,记为fragment1,fragment2,fragment3。

这时fragment2中有一个功能,是点击里面的一个button,做一些操作,到返回时,要更新fragment2界面。

关键:只需要更新fragment2


查阅一些资料,最后的解决方案记录如下:


viewpager使用的adapter是继承自FragmentPagerAdapter

需要重写其中的instantiateItem方法,重写如下:

@Overridepublic 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);}
0 0
原创粉丝点击