AndroidChangeSkin icon indicating copy to clipboard operation
AndroidChangeSkin copied to clipboard

ViewPager+Fragment 换肤设置失效

Open lhholylight opened this issue 8 years ago • 3 comments

ViewPager+Fragment,如果有4个Fragment,activity加载完后后面的2个Fragment还没有初始化,里面设置的tag会失效,设置过的Fragment中的tag,如果该Fragment被销毁了在重新创建时里面的tag也会失效。

lhholylight avatar Nov 24 '16 06:11 lhholylight

image 问题出在SkinManager.register(final Activity activity),注册的时候是按照activity注册的,通知view换肤的情况就是调用SkinManager.notifyChangedListeners();这个方法来遍历所有的activity下的(包括fragment)的view换肤。 然而.register(final Activity activity)这个方法的源码是这样的public void register(final Activity activity) { mActivities.add(activity);

    activity.findViewById(android.R.id.content).post(new Runnable()
    {
        @Override
        public void run()
        {
            apply(activity);//  这里只调用了APPly方法 
        }
    });
}

再来看 public void apply(Activity activity) { List<SkinView> skinViews = SkinAttrSupport.getSkinViews(activity); if (skinViews == null) return; for (SkinView skinView : skinViews) { skinView.apply(); } } 这个时候遍历activity的所有view来换肤。 所以当fragment在activity oncreate()之后添加就没有换肤效果了。或者当换过肤的fragment销毁之后重新创建就也没有效果了。

zhzhh7378 avatar Dec 22 '16 07:12 zhzhh7378

如果 把viewpager的缓存量 加载到最大,应该可以解决,但是这种方式不够优雅.....

yizems avatar Feb 05 '17 02:02 yizems

SkinManager.getInstance().injectSkin(v);

hazyrain avatar Apr 14 '17 10:04 hazyrain