Android基类Activity的设计

来源:互联网 发布:js滤镜效果 编辑:程序博客网 时间:2024/06/03 19:30

一个好的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,如果一步步来。代码简洁很多,也更容易管理

2 0
原创粉丝点击