首页投稿(暂停使用,暂停投稿)

FragmentPagerAdapter 缓存策略 带来的问题

2016-05-26  本文已影响460人  litao0621

源码中FragmentPagerAdapterinstantiateItem时会先去通过tag来找对应Fragment如果存在就直接使用,如果不存在则通过makeFragmentName生成tag创建新的Fragment

    public Object instantiateItem(ViewGroup container, int position) {
        //..
        //..
        long itemId = this.getItemId(position);
        String name = makeFragmentName(container.getId(), itemId);
        if(fragment != null) {    
            this.mCurTransaction.attach(fragment);
        } else {    
            fragment = this.getItem(position);    
            this.mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId));
        }
        //..
        //..        
    }

    private static String makeFragmentName(int viewId, long id) {   
        return "android:switcher:" + viewId + ":" + id;
    }

这样在某些情况下会带来一些问题,例如:

解决方法

上一篇 下一篇

猜你喜欢

热点阅读