按名称自动绑定视图
Bind views automatically by name
编写样板代码总是困扰着我。 Android 中的其中一项是绑定视图:
TextView email;
TextView password;
//...
private bindViews() {
email = (TextView) findViewById(R.id.email);
password = (TextView) findViewById(R.id.password);
//...
}
我认为可以做得更好。
最近我发现了 ButterKnife 图书馆,我很喜欢它。它使代码更少:
@BindView(R.id.email) TextView email;
@BindView(R.id.password) TextView password;
//...
ButterKnife.bind(this);
但问题是我们通常将我们的视图命名为与其 ID 匹配。例如 xml id 和 java 字段名称都是 password
。 (并且还将蛇形外壳转换为骆驼外壳)。所以我在想理论上id部分也可以去掉,代码缩短成这样:
@BindView TextView email;
@BindView TextView password;
//...
bind(this);
有这样的解决方案吗?如果没有,它是否有用且可行?因为我想创建它,如果没有的话。
据我所知,没有这样的东西。但是 ButterKnife 正在积极开发并拥有相当多的追随者。我个人不会为了让我的代码稍微不那么冗长而放弃它。
我认为这仍然是一项很酷的练习。可以分叉 ButterKnife 并尝试合并该功能。为 Jake Wharton 的图书馆之一做出贡献将是一项相当大的成就。
这个值多少,你可能会喜欢LoganSquare。它是一个 JSON 解析器,其功能基本上与您使用注释描述的相同。它还非常快。这是一个使用它的例子:
@JsonObject
public class User{
// Will infer JSON key based off variable's name
@JsonField
public String name;
// Can specify a key's name too if you want like this
@JsonField(name="date_of_birth")
public long dateOfBirth;
// LoganSquare requires a default constructor like this
public User(){}
}
编写样板代码总是困扰着我。 Android 中的其中一项是绑定视图:
TextView email;
TextView password;
//...
private bindViews() {
email = (TextView) findViewById(R.id.email);
password = (TextView) findViewById(R.id.password);
//...
}
我认为可以做得更好。
最近我发现了 ButterKnife 图书馆,我很喜欢它。它使代码更少:
@BindView(R.id.email) TextView email;
@BindView(R.id.password) TextView password;
//...
ButterKnife.bind(this);
但问题是我们通常将我们的视图命名为与其 ID 匹配。例如 xml id 和 java 字段名称都是 password
。 (并且还将蛇形外壳转换为骆驼外壳)。所以我在想理论上id部分也可以去掉,代码缩短成这样:
@BindView TextView email;
@BindView TextView password;
//...
bind(this);
有这样的解决方案吗?如果没有,它是否有用且可行?因为我想创建它,如果没有的话。
据我所知,没有这样的东西。但是 ButterKnife 正在积极开发并拥有相当多的追随者。我个人不会为了让我的代码稍微不那么冗长而放弃它。
我认为这仍然是一项很酷的练习。可以分叉 ButterKnife 并尝试合并该功能。为 Jake Wharton 的图书馆之一做出贡献将是一项相当大的成就。
这个值多少,你可能会喜欢LoganSquare。它是一个 JSON 解析器,其功能基本上与您使用注释描述的相同。它还非常快。这是一个使用它的例子:
@JsonObject
public class User{
// Will infer JSON key based off variable's name
@JsonField
public String name;
// Can specify a key's name too if you want like this
@JsonField(name="date_of_birth")
public long dateOfBirth;
// LoganSquare requires a default constructor like this
public User(){}
}