重构,夜未眠
为Activity定义新的生命周期
重点:单一职责
->一个类或者方法,只做一件事情
重构一:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public class LoginActivity extends Activity implements View.onClickListener{ @Override protected void onCreate(Bundle saveInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
Bundle bundle = getIntent().getExtras(); String strEmail = bundle.getString(AppConstants.Email);
etEmail = (EditText) findViewById(R.id.email); etEmail.setText(strEmail); etPassword = (EditText) findViewById(R.id.password);
Button btnLogin = (Button) findViewById(R.id.sign_in_button); btnLogin.setOnClickListener(this);
loadWeatherData(); loadCityData(); } }
|
从上面的Oncreate()方法中,可以看出,需要做的事情太多了,其实可以简化成三块:
initVariables
initViews
loadData
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public abstract class BaseActivity extends Activity{ @Override protected void onCreate(Bundle saveInstanceState){ super.onCreate(savedInstanceState);
initVariables(); initViews(savedInstanceState); loadData(); }
protected abstract void initVariables(); protected abstract void initViews(Bundle savedInstanceState); protected abstract void loadData(); }
|
重构二:
一般的,对点击事件的监听方式可以有以下两种:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public class LoginActivity extends Activity implements View.OnClickListener{
@Override protected void onCreate(Bundle savedInstanceState){
Button btnLogin = (Button)findViewById(R.id.sign_in_button); btnLogin.setOnClickListener(this); }
@Override public void onClick(View v){ switch(v.getId()){ case R.id.sign_in_button: Intent intent = new Intent(LoginActivity.this,PersonCenterActivity.class); startActivity(intent); } } }
|
1 2 3 4 5 6 7 8 9 10
|
btnLogin = (Button) findViewById(R.id.sign_in_button); btnLogin.setOnClickListener(new View.OnClickListener{ @Override public void onClick(View v){ getoLoginActivity(); } });
|
书中更推荐使用第二种
方式进行实现,其给出的原因是:
第二种相比较于第一种:
- 直接在btnLogin这个按钮对象上增加点击事件,是面向对象的写法。
- 将onClick方面的实现,封装成一个gotoLoginActivity方法。
实体化编程