我正在开发一个 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/