android - AS中Module中没法使用Butterknife.有什么好的替代?
问题描述
说是Module中的R文件下的id不是final的。然后Butterknife就不行。。。估计别的注解类型的也不好使吧。。。于是乎有什么办法么。。
详见:https://github.com/JakeWharton/butterknife/issues/100
以下是作者JakeWharton在14年12月的原话。。。
Yes this is not supported. This is a tradeoff between ease-of-use and what I tolerate as a sane API.
The only way to accomplish something like this is to allow string values like this:
@InjectView(name = 'content_frame') protected FrameLayoutcontentFrame; The downside’s to this are:
The downside’s to this are:
It’s not rename-safe or compile-safe (kind of). If you open the layout XML for this and do an IDE-backed rename operation it will not catch this string and update it. It also means you can (technically) compile the above code if there is no content_frame ID that exists. Now the compilation will eventually fail because the generated code will become invalid.
It’s hard to know what R class to reference in the generated code, especially when you take into consideration the fact that you can use references to IDs that exist in libraries that you are referencing.
It forces us to have defaults for both the value and name properties on each annotation which means you can write @InjectView Foo foo and Butter Knife will have to fail the builder rather than javac.
Because of these facts, I have chosen not to support library projects.
One way that this could potentially be solved is to use a Gradle plugin rather than an annotation processor. I don’t have the time to explore something like that for a few months though.
问题解答
回答1:Android Studio Prettify
这个插件自动生成findViewById等内容,你可以试试。 你说Butterknife不能用,应该是你用错了吧,你仔细看看是不是用错了。
回答2:module中好像也没看到别的,还是直接使用findViewById吧
回答3:现在基本不用butterknife了,直接封装一个方法在BaseActivity或BaseFragment
//BaseActivitypublic <T extends View> T $(@IdRes int resId){ return (T)super.findViewById(resId);}//BaseFragmentpublic <T extends View> T $(View layoutView, @IdRes int resId){ return (T)layoutView.findViewById(resId);}//使用TextView tvName=$(R.id.tv_name);回答4:
这个也行,功能比较多https://github.com/excilys/androidannotations
回答5:最好使用系统自带的findviewyid来查找id,第三方的工具之间使用会存在冲突
回答6:RoboGuice?或者android annotation?
回答7:
相关文章:
1. javascript - 问一个有趣的问题: 如何将 数字 转成 金额格式2. jpa mysql 如何id自增初始值?3. python - 有一个函数名(字符串形式),如何能够调用这个函数?4. javascript - 怎么才能有效的防止网页被盗?5. java - mysql查询,这是怎么查询的呢6. nginx - 关于vue项目部署到ngnix后出现的问题7. MySQL的SELECT...FOR UPDATE究竟起什么作用8. javascript - vue使用keep-alive不能保持滚动位置问题。9. javascript - 表单提交后,后台直接返回页面,应该如何处理?10. javascript - 一个字符串转换成数字,例子就是a="2,322.222",b=’1,211.21’,如何在angualr中执行相减

网公网安备