AS3.0 组件化开发中 butterknife R2绑定控件引发的错误

1.背景介绍:由于组件化开发要分多个moudle模块,通用的部分经常会创建一个moudle_base 提高复用性,在moudle_base 中集成butterknife 由于目前 butterknife对AS3.0兼容不太好,所以需要在项目的gradle下采用 8.4.0的版本就可以了 classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'。由于每一个业务moudle都依赖了moudle_base,所以会出现一种特殊的情况,使用R2导包的时候是导入当前moudle 还是moudle_base中的?
//import com.text.moudle_base.R2;
import com.text.moudle_A.R2;
@BindView(R2.id.vp_task_container)
ViewPager vp_task_container;

2.问题发现:代码activity中ViewPager 的fragment中有的自动导入了当前,moudle的R2,有的导入moudle_base的R2(特别是getItem() index = 1时)无论怎么 clean 和 rebuild 都不会报错,也能跑起来,当你跳转到这个activity瞬间 崩 沙卡拉卡~,贴主要报错。excuse me?找不到?

java.lang.IllegalStateException: Required view 'rect' with ID 2131296738 for field 'list_content' was not found. If this view is optional add '@Nullable' (fields) or '@Optional' (methods) annotation.
                                                                 at butterknife.internal.Utils.findRequiredView(Utils.java:92)
                                                                 at butterknife.internal.Utils.findRequiredViewAsType(Utils.java:104)
                                                                 at com.zh.moudle_supervisor.ui.page.CurrentTask_ViewBinding.<init>(CurrentTask_ViewBinding.java:22)
                                                                 at java.lang.reflect.Constructor.newInstance0(Native Method)
                                                                 at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
                                                                 at butterknife.ButterKnife.createBinding(ButterKnife.java:199)
                                                                 at butterknife.ButterKnife.bind(ButterKnife.java:172)
                                                                 at com.zh.moudle_base.ui.page.base.BaseFragment.onCreateView(BaseFragment.java:92)

3 解决方法: 首先怎么排查到呢?断店以后发现activity oncreate是没问题的,我就猜测是activity中填充的内容出现问题,然后查看代码只有一个viewpager,点开FragmentAdapter中每一个fragment查看,直接查看R2导包,对比发现 有一个fragment的R2竟然不一样,瞬间感觉天亮了,把导包改成当前moudle的R2,yes,解决!

4.后续: 没一会旁边的小伙伴也遇到问题了,指着butterknife 编译的代码说这id错乱啦,这什么鬼 ? 然后我悄然站在了26个英文字母的第二位!

猜你喜欢

转载自blog.csdn.net/guojiayuan002/article/details/80310725