一、什么是抽基类
在Android中,一般来说一个应用会存在几十个页面,并且一个应用一般也会使用一个特定的主题,其中的页面的风格也是一致的,并且页面中的动画效果、页面的切换效果等也应该保持同样的风格,那么就需要一个基类,来完成页面的基础设置,这就是所谓的基类。
界面统一管理原因
当应用中的界面达到一定数量级时,如几十个界面,便于项目管理
提高界面的处理速度
避免由于多Activity导致的问题
界面统一管理的基础
当应用中的界面达到一定数量级时,为了能够让用户更容易操作上手,产品设计时会将界面显示风格进行统一。
MainActivity
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends BaseActivity {
private TextView text_view;
@Override
protected int bindLayout() { //绑定布局
return R.layout.activity_main;
}
@Override
protected void initView() { //初始化控件
text_view = bindView(R.id.text_view);
}
@Override
protected void initData() { //初始化数据
//初始化数据
text_view.setText("aaa");
}
@Override
protected void bindEvent() {
text_view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getTost("bbbb");
getIntent(MainActivity.this, SecondActivity.class);
}
});
}
BaseActivity(基类)
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast;
/**
* @Author
* @E-mail:
* @Date:
* @Description:抽基类
*/
public abstract class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//顺序不能变
//绑定布局
setContentView(bindLayout());
//初始化控件
initView();
//初始化数据
initData();
//初始化事件 (设置点击事件)
bindEvent();
}
//绑定布局的方法
protected abstract int bindLayout();
//绑定控件的方法
protected abstract void initView();
//设置数据的方法
protected abstract void initData();
//设置事件的方法
protected abstract void bindEvent();
//找控件的方法
protected <T extends View> T bindView(int resId){
return (T)findViewById(resId);
}
//封装Toast的方法
protected void getTost(String text){
Toast.makeText(BaseActivity.this,text,Toast.LENGTH_SHORT).show();
}
//找控件 (避免多次重写findViewById)
//定义一个稀疏数组
private SparseArray<View> sparseArray=new SparseArray<>();
public View getId(int id){
//先在数组中进行查找
View view = sparseArray.get(id);
if (view==null){
//没有找到的话就findViewById来找
view=findViewById(id);
//存入到数组中
sparseArray.put(id,view);
}
return view;
}
//点击事件
public void setOnClick(View.OnClickListener clickListener,int...ids){
if (ids==null){
return;
}
for (int id:ids){
//通过调用找到控件的方法来进行设置监听 getId()之上写的找控件的方法
getId(id).setOnClickListener(clickListener);
}
}
//Activity跳转方法的封装
public void getIntent(Context context,Class str){
Intent intent=new Intent();
intent.setClass(context,str);
startActivity(intent);
}
}