在重写Factory2的并给LayoutInflater设置的时候会遇到这个这个问题,通过源码可以发现问题所在:
可以发现当LayoutInflater中,当mFactorySet的值为true时会出现这个异常,因此只要把mFactorySet设置为false就不会有异常了,而mFactorySet又是private类型,只能通过反射来设置了:
设置好后运行,还是报相同的错:
A factory has already been set on this LayoutInflater
把鼠标放到getDeclaredField中的属性名mFactorySet上,出现提示:
这个属性不存在,可是源码中明明是存在,看看源码:
原来最大的支持SDK版本直到P(28)版本,
在build.gradle中修改targetSdkVersion为28:
可以发现程序运行正常了!