您的位置:首页 > 移动开发 > Android开发

Android基类Activity的设计

2016-08-03 14:34 375 查看
一个好的activity可以更方便的管理app的activity,而且使代码不会写的那么臃肿,更有逻辑性。

public abstract class AbsBaseActivity extends FragmentActivity{
public abstract void initData() throws Exception;
public abstract void setLinterner();
public String TAG=this.getClass().getName();
;
public MyProgressDialog progressDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
try {
initData();
StaticMethod.addActivity(this);
} catch (Exception e) {
Log.e(TAG,e.getLocalizedMessage());
}
setLinterner();
}
/**
* 提示对话框
* @param value
*/
public void showToast(String value){
Toast.makeText(this,value,Toast.LENGTH_SHORT).show();
}
@Override
protected void onResume() {
super.onResume();
// umeng
MobclickAgent.onResume(this);
}

@Override
protected void onStart() {
super.onStart();
// umeng
MobclickAgent.onPause(this);
}
public void finshAll(){
StaticMethod.finshAllActivity();
}
//获取屏幕的宽度
public static int getScreenWidth(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getWidth();
}
//获取屏幕的高度
public static int getScreenHeight(Context context) {
WindowManager manager = (WindowManager) context
.getSystemService(Context.WINDOW_SERVICE);
Display display = manager.getDefaultDisplay();
return display.getHeight();
}

public void LogI(String value){
Log.i(TAG,value);
}

public void LogE(String value){
Log.e(TAG,value);
}
/**
* 创建一个公共的intent类
*/
public class Builder{
private Intent intent;
private boolean isForResult; //是否需要回调
private int requestCode;//请求标记

public Builder(Class<? extends Object> c){
intent=new Intent(AbsBaseActivity.this,c);
}
/**
* 传入bundle
* @param key
* @param bundle
*/
public Builder build(String key,Bundle bundle){
getIntent().putExtra(key,bundle);
return this;
}

/**
* 传入String类型
* @param key
* @param value
* @return
*/
public Builder build(String key,String value){
getIntent().putExtra(key,value);
return this;
}

/**
* 传入int类型
* @param key
* @param value
* @return
*/
public Builder build(String key,int value){
getIntent().putExtra(key,value);
return this;
}

/**
* 传入double类型
* @param key
* @param value
* @return
*/
public Builder build(String key,double value){
getIntent().putExtra(key,value);
return this;
}

/**
* 传入long类型
* @param key
* @param value
* @return
*/
public Builder build(String key,long value){
getIntent().putExtra(key,value);
return this;
}

/**
* 传入Serializable类型
* @param key
* @param value
* @return
*/
public Builder build(String key,Serializable value){
getIntent().putExtra(key,value);
return this;
}

/**
* 传入Parcelable类型
* @param key
* @param value
* @return
*/
public Builder build(String key,Parcelable value){
getIntent().putExtra(key,value);
return this;
}
/**
* 是否有回调
* @param forResult
* @return
*/
public Builder build(boolean forResult){
isForResult=forResult;
return this;
}

/**
* 设置请求参数
* @param requestCode
* @return
*/
public Builder build(int requestCode){
this.requestCode=requestCode;
return this;
}

/**
* 开启activity
*/
public void startActivity(){
if (isForResult){
AbsBaseActivity.this.startActivity(getIntent());
}else {
AbsBaseActivity.this.startActivityForResult(getIntent(),requestCode);
}
}
private Intent getIntent(){
return intent;
}
}
}

代码比较简单,相信新手都会看得懂。。

这里最主要的Intent跳转的内部类,这里采用的建造者模式。

然后你要使用就可以这样使用

new MainActivity.Builder(AddFriendActivity.class)
.startActivity();

如果需要传值过去就可以这样

new MainActivity.Builder(AddFriendActivity.class)
.build("key","asdf")
.build("int",122)
.startActivity();

而你如果需要回到,只需要设置true和带去requestCode

/**
* 是否有回调
* @param forResult
* @return
*/
public Builder build(boolean forResult){
isForResult=forResult;
return this;
}

/**
* 设置请求参数
* @param requestCode
* @return
*/
public Builder build(int requestCode){
this.requestCode=requestCode;
return this;
}

这样就不用像以前要new出一个Intent,如果一步步来。代码简洁很多,也更容易管理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: