Android / Java和多个“查看状态”

时间:2014-01-27 20:29:57

标签: java android design-patterns

有没有人认识到这种模式并知道一个整洁的解决方案?

我有一个可以在某些州的观点。我们称他们为NeutralSuccessErrorInProgress。在视图中,我有多个元素(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");
}`

1 个答案:

答案 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);