Часто встречаю такой код при разработке для Android:
view.setVisibility(condition ? View.VISIBLE : View.GONE);
Использование такой конструкции приводит к тому, что это тернарное выражение дублируется в setVisibility практически каждого view, который нужно показать или спрятать.
В качестве альтернативы можно использовать простенький DSL, который позволит писать что то вроде:
gone(view,
otherView,
moreView)
.orVisibleIf(condition);
Плюсов сразу несколько -это позволяет управлять видимостью нескольких view одновременно, убирает многократное повторение условного выражения и в целом короче и лучше читается.
А вот "определение" этого DSL:
final class ViewVisibilityTools {
public interface OrVisible {
void orVisibleIf(boolean condition);
}
public OrVisible gone(final View...views) {
return new OrVisible() {
@Override public void orVisibleIf(final boolean condition) {
setVisible(views, condition, View.GONE);
}
};
}
public OrVisible invisible(final View...views) {
return new OrVisible() {
@Override public void orVisibleIf(final boolean condition) {
setVisible(views, condition, View.INVISIBLE);
}
};
}
private void setVisible(final View views[],
final boolean condition,
final int alternative) {
final int visibility;
if (condition) visibility = View.VISIBLE;
else visibility = alternative;
for (final View v: views) {
v.setVisibility(visibility);
}
}
}
Нужно только статически импортировать методы gone и invisible там где они нужны.
No comments:
Post a Comment