定制自己的BaseActivity
每一个类继承BaseActivity 这样可以直接少写很多方法,很便利
public abstract class BaseActivity extends Activity implements View.OnClickListener {
private int titlebarId;//给activity指定titlebar 布局的Id
private boolean mIsInitData;//是否初始化数据
private boolean isHasTitleBar;//设置activity是否有titlebar
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
// 初始化参数 给定titlebarId 以及是否有titlebar 没有 titlebarid值任意
public void initParams(int titlebarId,boolean isHasTitleBar){
this.titlebarId = titlebarId;
this.isHasTitleBar = isHasTitleBar;
}
//在执行setContentView 之前调用initParams方法
@Override
public void setContentView(int layoutResID) {
if(isHasTitleBar){
requestWindowFeature(Window.FEATURE_CUSTOM_TITLE);
}else{
requestWindowFeature(Window.FEATURE_NO_TITLE);
}
super.setContentView(layoutResID);
if(isHasTitleBar){
getWindow().setFeatureInt(Window.FEATURE_CUSTOM_TITLE,titlebarId); //titlebar为自己标题栏的布局
}
initView();
}
@Override
public void onWindowFocusChanged(boolean hasFocus) {
if (hasFocus) {
if (!mIsInitData) {
initData();
mIsInitData = true;
}
}
super.onWindowFocusChanged(hasFocus);
}
protected void initData() {
}
protected abstract void initView();
/**
* 获取View
*
* @param id
* @return
*/
//通过反射直接获取各种view的对象
@SuppressWarnings("unchecked")
protected <T extends View> T mGetView(int id) {
return (T) findViewById(id);
}
/**
* 获取Button的实例 并绑定点击事件
*
* @param id
* @return
*/
protected Button mGetButtonSetOnClick(int id) {
Button btn = (Button) findViewById(id);
btn.setOnClickListener(this);
return btn;
}
/**
* 获取ImageView的实例 并绑定点击事件
*
* @param id
* @return
*/
protected ImageView mGetImageViewSetOnClick(int id) {
ImageView image = (ImageView) findViewById(id);
image.setOnClickListener(this);
return image;
}
/**
* 获取View的实例 并绑定点击事件
*通过反射直接设置点击监听事件 并且获取对象 前面ImageView 和button 就有点多余了
* @param id
* @return
*/
protected <T extends View> T mGetViewSetOnClick(int id) {
T view = (T) findViewById(id);
view.setOnClickListener(this);
return (T)view;
}
/**
* 获取TextView中的文本信息
*
* @param tv
* @return
*/
protected String mGetTextViewContent(TextView tv) {
return tv.getText().toString().trim();
}
/**
* 获取EditText中的文本信息
*
* @param et
* @return
*/
protected String mGetEditTextContent(EditText et) {
return et.getText().toString().trim();
}
// 对toast分装 可以少写很多代码
protected void print(int sid) {
Toast.makeText(this,getResources().getString(sid),Toast.LENGTH_SHORT).show();
}
protected void print(String sMsg) {
Toast.makeText(this,sMsg,Toast.LENGTH_SHORT).show();
}
}
使用示例:
继承BaseActivity 重写initView 和onclick方法
public class MainActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//直接调用initParams 在setContentView 之前这是没有titlebar的情况
//有titlebar的情况 titlebar 的使用说明参考 http://blog.csdn.net/gaoanchen/article/details/50437244
initParams(0, false);
setContentView(R.layout.activity_main);
}
@Override
protected void initView() {
tv_content = (TextViewDemo)mGetView(R.id.id_tv_content);
}
@Override
public void onClick(View v) {
}
}