有没有人认识到这种模式并知道一个整洁的解决方案?
我有一个可以在某些州的观点。我们称他们为Neutral
,Success
,Error
,InProgress
。在视图中,我有多个元素(Buttons,TextViews和ProgressBar),根据视图所处的状态,它们应该是可见的/启用的。
目前我有方法代表执行必要的.setEnabled()
和.setVisibility()
调用的状态。有4个状态和几个元素,这会很快变得混乱。
我也觉得State Pattern不一定是一个很好的解决方案,但却是个人想到的东西。
我很想听听你们认为什么是一个简单而整洁的解决方案。
示例代码:
void setIsRegistering() {
isRegistering = true;
isRegistered = false;
progressBar.setVisibility(View.VISIBLE);
successText.setVisibility(View.GONE);
errorText.setVisibility(View.GONE);
setupFooterButton.setEnabled(false);
setupFooterButton.setText("Adding browser");
}
void setIsRegistered() {
isRegistering = false;
isRegistered = true;
progressBar.setVisibility(View.INVISIBLE);
successText.setVisibility(View.VISIBLE);
errorText.setVisibility(View.GONE);
setupFooterButton.setEnabled(true);
setupFooterButton.setText("Next");
}
void setIsNotRegistered() {
isRegistering = false;
isRegistered = false;
progressBar.setVisibility(View.INVISIBLE);
successText.setVisibility(View.INVISIBLE);
errorText.setVisibility(View.GONE);
setupFooterButton.setEnabled(true);
setupFooterButton.setText("Add browser");
}`
答案 0 :(得分:0)
您可以使用ViewAnimator:(http://developer.android.com/reference/android/widget/ViewAnimator.html)
然后,您可以调用viewAnimator.setDisplayedChild()来设置所选项目。
setDisplayedChild()接受一个整数,所以我通常创建一个枚举来保存我想要的状态:
enum ViewStates {
NEUTRAL, SUCCESS, ERROR
}
setDisplayedChild(ViewStates.Neutral.ordinal());
或者如果那太冗长:
enum ViewStates {
NEUTRAL, SUCCESS, ERROR
public static int neutral = NEUTRAL.ordinal();
public static int success = SUCCESS.ordinal();
public static int error = ERROR.ordinal();
}
setDisplayedChild(neutral);