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

刚开始做完第一个应用,开始重构我的代码。没有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");
    }
    

}

 

 

源码:下载地址

欢迎大家回复指正。

 

 

posted @ 2012-08-24 20:16  yxieguodong  阅读(699)  评论(0编辑  收藏  举报