AndroidアプリのViewのXMLは、平べったくなるように書いてる。
今までは、ある条件を満たす時にはAとBとCを消して、満たさない時はAとBとCを表示するみたいな事をやりたい時に全部のViewを指定していた。
そうすると後で何かViewを追加した時にどちらかの方では変更し忘れるとか起きうる。変化に弱い。
@BindView(R.id.hoge_name)
View hogeNameView;
@BindView(R.id.hoge_address)
View hogeAddressView;
@BindView(R.id.hoge_tel)
View hogeTelView;
void onCreate() {
...
ButterKnife.bind(this);
...
}
public void hideHoge() {
hogeNameView.setVisibility(View.GONE);
hogeAddressView.setVisibility(View.GONE);
hogeTelView.setVisibility(View.GONE);
}
public void showHoge() {
hogeNameView.setVisibility(View.VISIBLE);
hogeAddressView.setVisibility(View.VISIBLE);
hogeTelView.setVisibility(View.VISIBLE);
}
ButterKnifeのview listsを使うとこう書ける。ひとまとめに出来るので、変更が起きた時も変更しやすい。
@BindViews({
R.id.hoge_name,
R.id.hoge_address,
R.id.hoge_tel
})
List<View> hogeViews;
void onCreate() {
...
ButterKnife.bind(this);
...
}
public void hideHoge() {
ButterKnife.apply(hogeViews, new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setVisibility(View.GONE);
}
});
}
public void showHoge() {
ButterKnife.apply(hogeViews, new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setVisibility(View.VISIBLE);
}
});
}
ただこのブログを書いてる時に以下のようなコードを書いた場合、値はどうなるんだろうなぁと思った。確かめてはないけど、VISIBLEのままだとハマったりしそう。
@BindView(R.id.hoge_name)
TextView hogeNameView;
@BindViews({
R.id.hoge_name,
R.id.hoge_address,
R.id.hoge_tel
})
List<View> hogeViews;
onCreate() {
hogeNameView.setVisibility(View.VISIBLE);
ButterKnife.apply(hogeViews, new ButterKnife.Action<View>() {
@Override public void apply(View view, int index) {
view.setVisibility(View.GONE);
}
});
hogeNameView.getVisibility();
}
もっと早く使っとけば良かった。もしくはもっといい方法があれば知りたい。