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

android-Activity路由机制及子页面退出软件方法

2012-08-24 20:16 471 查看
刚开始做完第一个应用,开始重构我的代码。没有java编程基础,还是初学,希望各位路过不要见笑。

之前在网上找了很多种完全退出的办法,退后选择把打开Activity添加到全局的List数组中,在要退出的时候,把List中的Activity全部关闭。

1.首先定义一个页面跳转辅助类 IntentHepler 、并在AddRoutingRule()方法中添加我想要的路由规则

public class IntentHepler {
//这个类是Activity跳转辅助类
//在AddRoutingRule方法中添加对应的转换规则
//在MyActivity的页面中直接调用IntentTo传入短命名进行页面跳转。
public static HashMap hashmap ;
public static void AddRoutingRule(){
hashmap = new HashMap<String,String>();
//com.baiyizf.gdouKnow.  之后的包组合
hashmap.put("About", "About.DefaultActivity");
hashmap.put("LoginJw", "JiaoWu.LoginJwActivity");
}

public static void IntentTo (MyActivity myActivity, String ActivityName) throws ClassNotFoundException{
Intent intent = new Intent();
//处理路由规则
ActivityName =Routing(ActivityName);
//反射类型
Class<MyActivity> clazz = (Class<MyActivity>) Class.forName(ActivityName);
intent.setClass(myActivity,clazz);
myActivity.startActivityForResult(intent, 0);
}
public static String Routing(String ActivityName){

//第一次先初始化hashmap
if(null == hashmap){
AddRoutingRule();
}

//取对应的路由规则
if(hashmap.containsKey(ActivityName)){
ActivityName  = hashmap.get(ActivityName).toString();
}
//组类命名空间进行组合。加入包的前面部分
ActivityName = "com.baiyizf.gdouKnow." + ActivityName;
return ActivityName;
}
}


下面是我的项目目录,比如我要跳转到About文件夹的Default页面,调用IntentTo方法传入ActivityName为"About"就实现跳转。



比如我从当前的Activity跳转到About页面。可以这样调用

IntentHepler.IntentTo(this,"About");


当然还可以变得更简单些,通过继承Activity就是下面要说到的内容。

2、定义一个StaticObject类,存储全局静态变量。这里我暂时只放一个Activity的List数组。

public class StaticObject {

private static List<MyActivity>  myActivityList ;
public static void AddMyActivity(MyActivity myActivity){
if(null == myActivityList){
myActivityList = new ArrayList<MyActivity>();
}
if(!myActivityList.contains(myActivity)){
myActivityList.add(myActivity);
}
}
public static void ReMoveMyActivity(MyActivity myActivity){
if(null == myActivityList){
return;
}
if(myActivityList.contains(myActivity)){
myActivityList.remove(myActivity);
}
}
public static List<MyActivity> GetMyActivityList(){
return myActivityList;
}

}


这里对应list有三个方法。分别是添加,移除,还有返回整个数组。

3、接下来定义MyActivity类继承Activity,然后其它页面继承Activity。在里面可以写每个页面都重复的代码,像添加Activity对象到List,toast,页面跳转,退出软件,handle,文件存储等。

public class MyActivity extends Activity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub

//添加当前activity到list数组
StaticObject.AddMyActivity(this);
super.onCreate(savedInstanceState);

}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
//把当前activity从list数组移除
StaticObject.ReMoveMyActivity(this);
super.onDestroy();
}

// finish全部打开的Activity实现退出
protected void finishAll () {
for(MyActivity myActivity:StaticObject.GetMyActivityList()){
myActivity.finish();
}

}
//跳转到Activity
//参数ActivityName可以是短规则名
protected void intentToActivity(String ActivityName){
try{

IntentHepler.IntentTo(this,ActivityName);
}
catch(ClassNotFoundException e){
Log.v("IntentError", "不存在该Activity:"+ActivityName);

}
}

public void displayToast(String str) {

Toast.makeText(this, str, Toast.LENGTH_SHORT).show();
}
//添加异步调用方法

//handle回调方法

//文件存储

//菜单

}


4、 下面就看一下它给我带来的效果

在MainActivity 跳转到LoginJwActivity页面

public class MainActivity extends MyActivity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intentToActivity("LoginJw");
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}
}


然后在LoginJwActivity 中退出软件

public class LoginJwActivity extends MyActivity{
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.jw_activity_login);
//
displayToast("loginJw");

Log.v("jwlogin", "loginjw");
SystemClock.sleep(6000);
finishAll();
//intentToActivity("About");
}

}


源码:下载地址

欢迎大家回复指正。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: