【发布时间】:2020-04-22 07:42:38
【问题描述】:
我正在尝试实现一个单独的导航模块,以便在关注可扩展性、可重用性和模块独立性的 android 库模块之间导航。我的应用架构类似于这个例子:
我目前的做法
1- 为每个库定义NavigatorInterface
2- 在NavigationModule 中实现每个NavigatorInterface。 (当然导航模块会知道所有其他库模块,但没关系,因为它不会被重用)
以下是我上面提到的架构的示例代码:
:auth
|-- 登录活动
|-- 注册活动
|-- 认证导航器
public class LoginActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void signup(){
navigator.NavigateToSignup(this);
}
private void profile(){
navigator.NavigateToProfile(this);
}
.....
}
public class SignupActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void login(){
navigator.NavigateToLogin(this);
}
private void profile(){
navigator.NavigateToProfile(this);
}
.....
}
public interface AuthNavigator {
void NavigateToLogin(Context context);
void NavigateToRegister(Context context);
}
:个人资料
|-- 个人资料活动
|-- ProfileNavigator
public class ProfileActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void about(){
navigator.NavigateToAbout(this);
}
.....
}
public interface ProfileNavigator {
void NavigateToProfile(Context context);
}
:关于
|-- 关于活动
|-- 关于导航器
public class AboutActivity extends AppCompatActivity {
private NavigatorCoordinator navigator; // how do I achieve this injection, without using Dagger etc.
.....
private void profile(){
navigator.NavigateToProfile(this);
}
.....
}
public interface AboutNavigator {
void NavigateToAbout(Context context);
}
上述方法是尝试消除同一模块:auth 内以及两个模块:profile 和:about 之间的循环依赖。下面是:navigation的实现。
:导航
|-- 导航器
public class Navigator implements AuthNavigator, ProfileNavigator, AboutNavigator {
@Override
public void NavigateToLogin(Context context) {
context.startActivity(new Intent(context, LoginActivity.class));
}
@Override
public void NavigateToSingup(Context context) {
context.startActivity(new Intent(context, SignupActivity.class));
}
@Override
public void NavigateToProfile(Context context) {
context.startActivity(new Intent(context, ProfileActivity.class));
}
@Override
public void NavigateToAbout(Context context) {
context.startActivity(new Intent(context, AboutActivity.class));
}
}
问题:
1- 我相信,我需要在:navigation 模块中实现NavigatorCoordinator,但我该怎么做呢?有这个实现的例子吗?
2- 如何在不使用 Deggar 或任何其他框架的情况下将 NavigatorCoordinator 的依赖项注入驻留在不同 modules 中的每个活动类中?我们可以使用Application类来实现吗,如果可以,请给出一个实现示例?
3- 如何从任何库设置Launcher 活动,例如:LoginActivity?
4- 如何从:app 模块调用:navigation 模块以启动特定活动,例如:ProfileActivity?
5- 这是实现可重用性、可扩展性和关注点分离的良好模块间导航方法吗?
6- 还有其他类似的好方法吗?任何代码示例?链接到文章?
PS:请不要告诉我使用导航架构组件。
【问题讨论】:
标签: android module navigation