zoukankan      html  css  js  c++  java
  • androidActivity路由机制及子页面退出软件方法

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

    源码:下载地址

    欢迎大家回复指正。

     

     

  • 相关阅读:
    Entity Framework Core Code First 项目实践
    客户至上
    ASP.NET MVC 项目文件夹结构
    'Microsoft.VisualStudio.Editor.Implementation.EditorPackage' package did not load correctly
    Validate the date format
    ASP.NETAutocomplete control
    Javascript 浏览器检测
    动态代理模式_应用(Redis工具类)
    微服务框架
    .Net Core 分布式微服务框架
  • 原文地址:https://www.cnblogs.com/baiyizf/p/2654726.html
Copyright © 2011-2022 走看看