AndroidChangeSkin
AndroidChangeSkin copied to clipboard
ViewPager+Fragment 换肤设置失效
ViewPager+Fragment,如果有4个Fragment,activity加载完后后面的2个Fragment还没有初始化,里面设置的tag会失效,设置过的Fragment中的tag,如果该Fragment被销毁了在重新创建时里面的tag也会失效。
问题出在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销毁之后重新创建就也没有效果了。
如果 把viewpager的缓存量 加载到最大,应该可以解决,但是这种方式不够优雅.....
SkinManager.getInstance().injectSkin(v);