组件化开发-简单的路由

2020-10-16  本文已影响0人  有腹肌的豌豆Z

路由原理

动手写一个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

上一篇下一篇

猜你喜欢

热点阅读