gpt4 book ai didi

java - 实现库中定义的接口(interface)

转载 作者:太空宇宙 更新时间:2023-11-04 10:35:31 25 4
gpt4 key购买 nike

我有我的 Android 库,它定义了一个用于注册库以获取回调的接口(interface)。我需要我的应用程序来实现该接口(interface)。但这会导致循环依赖,如何在不调用循环依赖的情况下实现这一点呢?项目结构:

MyApp-/.
类 LibraryImpl 实现接口(interface) register 。
MyLib-/.
接口(interface)寄存器。

示例代码 fragment :
MyLib

ActivityStarter.java

public interface ActivityStarter {
void startHelpActivity();
}

ActivityStarterModule.java

public class ActivityStarterModule extends ReactContextBaseJavaModule {
@ReactMethod
void navigateToExample() {
//Start an activity
}
}

我的应用程序 .
ActivityStarterImpl.java

public class ActivityStarterImpl extends BaseActivity implements ActivityStarter {
public void startHelpActivity(){
Intent intent = new Intent(this, HelpActivity.class);
startActivity(intent);
}
}

如何触发从MyLib函数中的navigateToExample到MyApp中的startHelpActivity函数的调用?

最佳答案

How does myLib get to know which class is implementing the interface?

选项 #1:MyApp 将其作为参数传递给 MyLib。这与您将其传递给 Intent 的方式相同。 :通过 Java Class对象。

选项 #2:该 Activity 有 <intent-filter>对于一些自定义隐式 Intent行动。 MyLib 创建 Intent对于那个隐含的Intent作用和用途setPackage()限制Intent的范围到应用程序自己的包。然后,使用 Intent 启动 Activity .

选项 #3:该 Activity 有 <intent-filter>对于一些自定义隐式 Intent行动。 MyLib 创建 Intent对于那个隐含的Intent作用和用途setPackage()限制Intent的范围到应用程序自己的包。然后,通过 PackageManager 查找 Activity 和resolveActivity() 。使用该信息构建显式 Intent (具有 Activity ComponentName 的 Activity )。然后,使用显式 Intent 启动 Activity .

选项#4:不要有两个单独的模块;让所有这些成为一个应用程序模块。这样,原来在MyLib中的代码就可以直接访问原来在MyApp中的代码了。

关于java - 实现库中定义的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49538446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com