Activity与Fragment作为Android UI布局中最重要的两种形式。
有些人喜欢将臃肿的逻辑代码全部写在activity里的onCreate()方法或者是fragment的onCreateView()里,
也有些人喜欢将Activity生命周期里的onCreate()中需要调用的方法封装在外部,使得Activity的生命周期整洁明了。
第一种人写的代码,在下称之为“臃肿代码”,第二种方式的人写的代码还有优化的地方。
第二种人仅仅是在单个Activity里的优化,可不可以在更多的Activity做同样的优化?
我们看一下我们的工程目录:
正如我们在一个Activity里一般都是三部:
①实例化控件,
②设置控件的适配器,
③设置控件子选项的点击监听事件;
那么让我们一起优化我们的代码吧。将大量Activity重复的步骤抽象出一个接口,让全部Activity实现这个接口,同时所有的Activity继承BaseActivity基类。例子:
一、定义一个接口ActivityMethod,声明所需要的方法。(方法多少和数目根据实际项目而定)
package com.czz.note.library;
public interface ActivityMethod {
// 初始化控件
public void initView();
// 设置适配器
public void initAdapter();
// 设置监听事件
public void setListener();
}
二、创建一个Activity的基类BaseActivity。
(注意:此处onCreate方法不需要setContentView指定相关的xml布局文件。)
把所有Activity都需要的方法放在他们的父类,即基类BaseActivity里。
package com.czz.note.activity;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
public class BaseActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 这里不需要setContentView
}
// 界面跳转
public void startAnimActivity(Class> cla) {
this.startActivity(new Intent(this, cla));
}
}
三、创建你的MainActivity,继承BaseActivity,并实现ActivityMethod接口。
package com.czz.note.activity;
import com.czz.note.R;
import com.czz.note.library.ActivityMethod;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends BaseActivity implements ActivityMethod {
private Button btn_jiaGouShi;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
initAdapter();
setListener();
}
@Override
public void initView() {
Toast.makeText(MainActivity.this, "initView", Toast.LENGTH_SHORT).show();
btn_jiaGouShi = (Button) findViewById(R.id.btn_jiaGouShi);
}
@Override
public void initAdapter() {
Toast.makeText(MainActivity.this, "initAdapter", Toast.LENGTH_SHORT).show();
}
@Override
public void setListener() {
Toast.makeText(MainActivity.this, "setListener", Toast.LENGTH_SHORT).show();
btn_jiaGouShi.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// 跳转到下一个界面,用到的确是BaseActivity里的方法
startAnimActivity(SecondActivity.class);
}
});
}
}
四、创建你的第二个Activity,你就可以轻松继承BaseActivity和实现ActivityMethod接口。
package com.czz.note.activity;
import com.czz.note.R;
import com.czz.note.library.ActivityMethod;
import android.os.Bundle;
import android.widget.Toast;
public class SecondActivity extends BaseActivity implements ActivityMethod {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
// 假设没有控件需要适配器,这里就不需要initAdapter()
initView();
setListener();
}
@Override
public void initView() {
Toast.makeText(SecondActivity.this, "initView", Toast.LENGTH_SHORT).show();
}
@Override
public void initAdapter() {
Toast.makeText(SecondActivity.this, "initAdapter", Toast.LENGTH_SHORT).show();
}
@Override
public void setListener() {
Toast.makeText(SecondActivity.this, "setListener", Toast.LENGTH_SHORT).show();
}
}
当你的工程有10个Activity或者10个Fragment,也就可以让自己的代码整洁些。