这里我准备分享一套Android项目框架,也是一个系列,希望也能学习学习,多有不足请指出。
首先应该是分包:我将他们分为activity包 body包 commons包 respons包 user包 utils包
它们分别负责不同的功能,同时也为接下来的代码更加规范。 它们分包负责:activity fragment的基类、进度监听、配置服务器地址密钥以及相关的开关等、回调、用户密码账号、辅助类工具。
我们首先提供activity的基类。我们将他命名为BaseFragmentActivity,咱们先简单一点 以后可以需要什么的时候再添加:
public abstract class BaseFragmentActivity extends FragmentActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AppManger.getAppManager().addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
//结束Activity&从堆栈中移除
AppManger.getAppManager().finishActivity(this);
}
}
我们将activity添加到堆栈 在ondestroy中再移除,根据此,再着我们可以提供一个管理activity的类:AppManger 暂且放在utils包下
public class AppManger {
private static Stack<Activity> activityStack;
private static AppManger instance;
private AppManger(){}
/**
* 单一实例
*/
public static AppManger getAppManager(){
if(instance==null){
instance=new AppManger();
}
return instance;
}
/**
* 添加Activity到堆栈 */
public void addActivity(Activity activity){
if(activityStack==null){
activityStack=new Stack<Activity>();
}
activityStack.add(activity);
}
/**
* 获取当前Activity(堆栈中最后一个压入的)
*/
public Activity currentActivity(){
Activity activity=activityStack.lastElement();
return activity;
}
/**
* 结束当前Activity(堆栈中最后一个压入的)
*/
public void finishActivity(){
Activity activity=activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public void finishActivity(Activity activity){
if(activity!=null){
activityStack.remove(activity);
activity.finish();
activity=null;
}
}
/**
* 结束指定类名的Activity
*/
public void finishActivity(Class<?> cls){
for (Activity activity : activityStack) {
if(activity.getClass().equals(cls) ){
finishActivity(activity);
}
}
}
/**
* 结束所有Activity
*/
public void finishAllActivity(){
for (int i = 0, size = activityStack.size(); i < size; i++){
if (null != activityStack.get(i)){
activityStack.get(i).finish();
}
}
activityStack.clear();
}
}
一个简单的基类就完成了(以后会往里面再添加一些东西)
根据相同需要 提供BaseFragment (activity包下)
public abstract class BaseFragment extends Fragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
return super.onCreateView(inflater, container, savedInstanceState);
}
}
再这还想再完善一下我们的功能~
在commons提供EACore类:
/**
* DeBUG开关
*/
public static final boolean DeBUGMode = true;
/**
* 日志标签
*/
public static final String TAG = "***";
/**
* 页面标题
*/
public static final String TITLE = null;
/**
* IP地址
*/
public static final String IP = "192.168.137.46";
/**
* 端口号
*/
public static final int PORT = 8080;
/**
* URL
*/
public static final String URL = "url拼接前缀";
/**
* 密钥
*/
public static final String Key="***";
/**
* 用户是否登陆
*/
public static boolean ISLOGIN=false;
咱们发现有一个调试开关,根据它我们编写log类 放utils包下
public abstract class Log {
public static void v(String tag, String msg) {
if (EACore.DeBUGMode)
android.util.Log.v(tag == null ? EACore.TAG : tag, msg);
}
public static void d(String tag, String msg) {
if (EACore.DeBUGMode)
android.util.Log.d(tag == null ? EACore.TAG : tag, msg);
}
public static void w(String tag, String msg) {
if (EACore.DeBUGMode)
android.util.Log.w(tag == null ? EACore.TAG : tag, msg);
}
public static void e(String tag, String msg) {
if (EACore.DeBUGMode)
android.util.Log.e(tag == null ? EACore.TAG : tag, msg);
}
public static void i(String tag, String msg) {
if (EACore.DeBUGMode)
android.util.Log.i(tag == null ? EACore.TAG : tag, msg);
}
}
页面标题 是咱们自定义title的标题 可以选择在BaseFragmentActivity中加入
requestWindowFeature(Window.FEATURE_NO_TITLE);