美文网首页
组件化开发-简单的路由

组件化开发-简单的路由

作者: 有腹肌的豌豆Z | 来源:发表于2020-10-16 14:18 被阅读0次

    路由原理

    动手写一个SimpleRouter,这个路由很简单主要是实现逻辑。
    1.所有的Activity都注册到路由表。
    2.界面跳转的时候从路由表里面获取对应的Class。进而界面跳转。

    Demo

    ZRouter路由表

    public class ZRouter {
    
        private static final ZRouter zRouter = new ZRouter();
    
        private ZRouter() {
    
        }
    
        /**
         * 获取单列
         *
         * @return
         */
        public static ZRouter getInstance() {
            return zRouter;
        }
    
        /**
         * 路由表 将所有的Activity都注册到这里
         */
        private Map<String, Class<? extends Activity>> routers = new HashMap<>();
    
        /**
         * 将Activity注册到路由表
         *
         * @param key key
         * @param cls class
         */
        public void register(String key, Class<? extends Activity> cls) {
            routers.put(key, cls);
        }
    
        /**
         * 界面跳转
         *
         * @param activity 发起界面跳转的 activity
         * @param key      通过key获取注册好的目标 activity class
         */
        public void startActivity(Activity activity, String key) {
            Class<? extends Activity> aClass = routers.get(key);
            if (aClass != null) {
                activity.startActivity(new Intent(activity, aClass));
            }
        }
    
    }
    
    

    Application 注册当前所有用到的Activity

    public class Application extends android.app.Application {
    
        @Override
        public void onCreate() {
            super.onCreate();
    
            // 初始化的时候将所有的Activity都注册到路由表中
            ZRouter.getInstance().register("main_2", MainActivity2.class);
            ZRouter.getInstance().register("main_3", MainActivity3.class);
        }
    }
    
    

    Activity发起界面跳转

    public class MainActivity extends AppCompatActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            // 点击跳转
            findViewById(R.id.btn_1).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ZRouter.getInstance().startActivity(MainActivity.this, "main_2");
                }
            });
    
            findViewById(R.id.btn_2).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    ZRouter.getInstance().startActivity(MainActivity.this, "main_3");
                }
            });
        }
    }
    

    Demo

    相关文章

      网友评论

          本文标题:组件化开发-简单的路由

          本文链接:https://www.haomeiwen.com/subject/wcyzpktx.html