为了账号安全,请及时绑定邮箱和手机立即绑定

如何在不违反DRY原则的情况下从多个活动中开始一项活动?

如何在不违反DRY原则的情况下从多个活动中开始一项活动?

隔江千里 2021-05-06 16:22:12
我正在开发一个Android应用程序,其中某些活动可能是从多个活动开始的,我知道如何使用Intent在活动之间进行切换。我只是在不违反DRY(请勿重做)原则的情况下努力编写代码。下面显示了该代码,其中重复了从两个不同的活动启动同一活动的代码:MainActivity.java启动SignInActivity.javapublic class MainActivity extends AppCompatActivity {private Button mSignUpButton;private Button mSignInButton;@Overrideprotected 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.javapublic class SignUpActivity extends AppCompatActivity {private Button mSignInButton;@Overrideprotected 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);    }}
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

我对DRY原理没有任何了解,但是在阅读此答案时,我得到了DRY原理背后的想法,而在考虑您的问题解决方案时,我得到了创建util类的想法,该类具有在所需活动之间进行导航的方法:


public class NavigationUtils{

public static void navigate(Context source, Class<?> destination){

            Intent intent = new Intent(source, destination);

            source.startActivity(intent);

        }

}

希望这个答案对您有帮助。


查看完整回答
反对 回复 2021-05-19
?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

首先-不要崇拜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);

    }

}

通常,我希望它返回一个意图,而不是只是出于某些原因而等待他们开始活动。这样,您还可以在SignInActivity中保留所有需要的参数及其名称的所有知识。


查看完整回答
反对 回复 2021-05-19
?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

好的考虑因素之一是使其具有BaseActivity通用功能。


public class BaseActivity extends AppCompatActivity { 



public void startActivity(Class<?> mClass, Bundle extras){

    Intent intent = new Intent(this, mClass);

    intent.putExtras(extras);

    startActivity(intent);

}


public void startActivity(Class<?> mClass){

    Intent intent = new Intent(this, mClass);

    startActivity(intent);

}

}


public class SignUpActivity extends BaseActivity {

  @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) {

            startActivity(SignInActivity.class);

        }

    });

  }

}


查看完整回答
反对 回复 2021-05-19
  • 3 回答
  • 0 关注
  • 166 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信