有没有办法可以自动替换Butterknife @Inject(id)注释的所有findviewbyid公式,或者我必须手动完成?我使用Android Studio IDE
答案 0 :(得分:3)
我编写了一些正则表达式来处理搜索和替换任务。但是,这可能不值得,取决于你有多少陈述。
我使用SublimeText来运行查询,它支持我需要的换行符。 IntelliJ没有匹配我尝试的查询中的换行符。我认为sed也可以使用(查看sed手册以获得'高级'开关或其他东西)。
字符串的搜索模式:
private (String) (\w+);((?:.|\n)*)\1 = \w*.getString\(R.string.(\w*)\);
替换字符串模式:
@BindString(R.string.$4)\n $1 $2;$3
查看ID的搜索模式
(?:private |public |protected |)(\w*) (\w+)(?:\s*=\s*null|);((?:.|\n)*)\s\2 = .*findViewById\(R.id.(\w*)\);
在上面我添加了搜索用其他修饰符声明的字段。
替换视图ID的模式
@Bind(R.id.$4)\n $1 $2;$3
您可能希望用\ s *替换空格,但这会使表达式更难以阅读,所以我没有在每个位置都这样做。
它的作用示例
private View map_center;
someMethod() {
...
map_center = activityOrView.findViewById(R.id.centerview);
...
}
成为
@Bind(R.id.centerview)
View map_center;
someMethod() {
...
...
}
正则表达式使用后引用\1
来定位字段的赋值。如果该字段不存在但是是局部变量,则它将使用@Bind包装局部变量,并且您必须手动将其作为字段。它不会将局部变量与声明放在同一行中作为赋值匹配。
答案 1 :(得分:0)
根据this tutorial,我应该说是的!:
The Butter Knife图书馆,由Jake Wharton开发并维护 (Square Inc.),有注释,可以帮助开发人员实例化 来自我们的活动或片段的观点。它还有注释要处理
onLongClick()
,findViewById()
等事件在每个活动或片段中,您必须删除或注释掉, 每次调用
@InjectView
方法并添加@InjectView(R.id.sample_textview) TextView sample_textview;
声明变量前的注释,表示 视图的标识符。
<div class="btn-group" dropdown>
<button type="button" class="btn btn-info">test</button>
<button type="button" class="btn btn-info dropdown-toggle">
<span class="caret"></span>
<span class="sr-only">Split button!</span>
</button>
<ul class="dropdown-menu" role="menu">
<li><a href="#">Action</a>
</li>
<li><a href="#">Another action</a>
</li>
<li><a href="#">Something else here</a>
</li>
<li class="divider"></li>
<li><a href="#">Separated link</a>
</li>
</ul>
</div>