如何避免项目之间的循环引用?

How to avoid a circular reference between projects?

我有一个 android 应用程序项目,它还有一些 android 库项目。每个图书馆项目都有自己的活动和资源。我已经实施了 NavigationDrawer 并希望在所有活动中使用它,因此我创建了一个包含抽屉的基础项目(android 库项目)(遵循此答案中的指南:Same Navigation Drawer in different Activities).然后想法是每个子项目(android 库项目)将从基础扩展,但此时我遇到了循环引用问题。

我的结构与这张图片相似:

子项目中的每个 activity 从 Base 库扩展是没有问题的,但问题是 Base 库也需要知道活动(因此循环引用),因此我可以处理 NavigationDrawer 中的点击,类似于:

mDrawerList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        switch (position) {
            case 0:
                Intent intent = new Intent(this, SubProjectOneActivityOne.class);
                startActivity(intent);
                finish();
                break;
            case 1:
                Intent intent1 = new Intent(this, SubProjectOneActivityTwo.class);
                startActivity(intent1);
                break;
            case 2:
                Intent intent2 = new Intent(this, SubProjectTwoActivityOne.class);
                startActivity(intent2);
                break;
            default:
                break;
    }
}});

所以目前我用这种方法遇到了死胡同。是否可以重载子项目中的点击事件?有人有其他建议吗?

我已经使用路由机制解决了这个问题(以及其他几个问题)。

我的解决方案在这个要点中:
https://gist.github.com/daentech/f372f3a6529d08979f1c

它将允许您添加基于字符串名称的路由,并通过打开这些命名路由启动 activity 或回调。

您的基础项目可以共享其他项目可以注入的单例路由器对象。这些子项目中的每一个都可以将它们的路由添加到路由器,而基础项目不需要知道这些路由的作用,只需要知道它们的名称。

您也可以使用通配符路由,但我计划在某个时候更新它以处理路由变量并允许 URL。

使用此类路由的好处在于,您可以处理从应用程序中的任何位置到其他任何位置的路由,甚至是来自被点击的通知之类的路由。