按名称自动绑定视图

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(){}
}