Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ViewPager+Fragment 换肤设置失效 #35

Open
lhholylight opened this issue Nov 24, 2016 · 3 comments
Open

ViewPager+Fragment 换肤设置失效 #35

lhholylight opened this issue Nov 24, 2016 · 3 comments

Comments

@lhholylight
Copy link

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

@zhzhh7378
Copy link

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

@yizems
Copy link

yizems commented Feb 5, 2017

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

@hazyrain
Copy link

SkinManager.getInstance().injectSkin(v);

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants