java - 如何在不违反DRY原则的情况下从多个Activity开始一个Activity?

标签 java android dry code-reuse

我正在开发一个 Android 应用程序,其中一些 Activity 可能从多个 Activity 开始,我知道如何使用 Intents 在 Activity 之间移动。我只是在为如何在不违反 DRY(不要重复自己)原则的情况下编写代码而苦苦挣扎。

代码如下所示,其中重复了从两个不同 Activity 启动相同 Activity 的代码:

MainActivity.java 启动SignInActivity.java

public class MainActivity extends AppCompatActivity {
private Button mSignUpButton;
private Button mSignInButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(R.style.AppTheme_MainActivity);

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSignUpButton = findViewById(R.id.sign_up_button);
    mSignInButton = findViewById(R.id.sign_in_button);

    mSignUpButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startSignUp();
        }
    });
    mSignInButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startSignIn();
        }
    });
}

private void startSignUp() {
    Intent signUpIntent = new Intent(this, SignUpActivity.class);
    startActivity(signUpIntent);
}

private void startSignIn() {
    Intent signInIntent = new Intent(this, SignInActivity.class);
    startActivity(signInIntent);
    }    
}

SignUpActivity.java 开始SignInActivity.java

public class SignUpActivity extends AppCompatActivity {
private Button mSignInButton;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_sign_up);

    mSignInButton = findViewById(R.id.sign_in_button);
    mSignInButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            startSignIn();
        }
    });
}

private void startSignIn() {
    Intent signInIntent = new Intent(this, SignInActivity.class);
    startActivity(signInIntent);
    }
}

最佳答案

首先 - 不要崇拜 DRY。这是一条经验法则,好的编程并不是全部。

其次-通常我为此做的是

class SignInIntent extends Activity {
    public static Intent createIntent(Context context, parameters) {
        Intent intent = new Intent(context, SignInIntent.class);
        //Pass parameters here
        return intent;
    }
}

class SomeOtherActivity extends Activity {
    public void someFunc() {
        startActivity(SignInIntent.createIntent(this, params);
    }
}

我通常让它返回一个 Intent ,而不是仅仅开始 Activity ,以防他们出于某种原因想要等待。通过这种方式,您还可以在 SignInActivity 中保留有关需要哪些参数及其名称的所有信息。

关于java - 如何在不违反DRY原则的情况下从多个Activity开始一个Activity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51236202/

相关文章:

java - 检测组件的FocusEvent是丢失还是获得

java - 列ID的增量

android - 如何使用一些预定义的文本和图像打开 Facebook Write Post

java - 如何处理年龄限制Youtube Data API 3.0

C 'generics' -- double 和 float

java - Vaadin DateField 显示 "null"而不是日和月

java - 如何同时从 Tomcat 服务器上的两个不同的 SpringBoot 应用程序加载 DLL?

android - 无法使用Gradle构建Android应用(使用Kotlin): “comand ' java.exe'以非零退出值1完成

css - 如何在 CSS 中不重复地选择一个元素及其第一个子元素?

javascript - TDD 和参数验证 Javascript