java - Android/Java 及多个 "view states"

标签 java android design-patterns

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

我有一个可能处于某些状态的 View 。我们称它们为NeutralSuccessErrorInProgress。在 View 中,我有多个元素(按钮、TextView 和 ProgressBar),这些元素应该是可见的/启用的,具体取决于 View 所处的状态。

目前,我有一些方法来表示执行必要的 .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");
}`

最佳答案

您可以使用 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);

关于java - Android/Java 及多个 "view states",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21391032/

相关文章:

java - Kafka Stream 时间戳提取器在 KGroupedStream 处失败

java - 组织 JDBC 项目

android - 无法为 Android 数据绑定(bind)创建自定义 setter - "Could not find accessor"错误

android - 如何使用 ActionBar Sherlock 设置选项卡样式

android - OnEditorActionListener 不起作用

c# - 管理引用计数和对象生命周期的模式

python - 类模板的习惯用法或设计模式?

java - 动态创建 Logback Loggers 和 Appenders

c++ - 在工厂方法中测试对象的创建

java - Gradle 项目同步失败 - Android Studio 3.5.1