我有我的Android,它定义了一个用于注册库以获得回调的接口。我需要我的应用程序来实现接口。但这会导致循环依赖,如何在不调用循环依赖的情况下实现这一目标。项目结构:
MyApp-/
class LibraryImpl implements interface register .我的朋友-/。
interface register . 示例代码片段:
MyLib .
ActivityStarter.java
public interface ActivityStarter {
void startHelpActivity();
}ActivityStarterModule.java
public class ActivityStarterModule extends ReactContextBaseJavaModule {
@ReactMethod
void navigateToExample() {
//Start an activity
}
}MyApp .
ActivityStarterImpl.java
public class ActivityStarterImpl extends BaseActivity implements ActivityStarter {
public void startHelpActivity(){
Intent intent = new Intent(this, HelpActivity.class);
startActivity(intent);
}
}如何触发从navigateToExample中的MyLib函数调用到MyApp中的startHelpActivity函数?
发布于 2018-03-28 15:52:30
myLib如何知道哪个类正在实现接口?
选项1: MyApp将其作为参数传递给MyLib。这与您如何通过JavaClass对象将其传递给Intent一样工作。
选项2:该活动具有一个用于某些自定义隐式Intent操作的Intent。MyLib为该隐式Intent操作创建了一个Intent,并使用setPackage()将Intent的范围限制在应用程序自己的包中。然后,使用该Intent启动活动。
选项3:该活动具有一个用于某些自定义隐式Intent操作的Intent。MyLib为该隐式Intent操作创建了一个Intent,并使用setPackage()将Intent的范围限制在应用程序自己的包中。然后,通过PackageManager和resolveActivity()查找活动。使用该信息构建显式Intent (具有活动的ComponentName )。然后,使用显式Intent启动活动。
选项4:不要有两个单独的模块;让所有这些都是一个应用程序模块。然后,以前在MyLib中的代码可以直接访问以前在MyApp中的代码。
发布于 2018-03-30 21:20:55
解决方案基于CommonsWare提出的建议。
MyLib。
ActivityStarter.java
public interface ActivityStarter {
void startHelpActivity();
}ActivityStarterModule.java
public class ActivityStarterModule extends ReactContextBaseJavaModule {
ActivityStarter mActivityStarter;
@ReactMethod
void navigateToExample() {
//Start an activity
mActivityStarter.startHelpActivity();
}
}MyApp。ActivityStarterImpl.java
public class ActivityStarterImpl extends BaseActivity implements ActivityStarter {
public void startHelpActivity(){
Intent intent = new Intent(this, HelpActivity.class);
startActivity(intent);
}
}
public class BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityStarterModule.mActivityStarterModule = new ActivityStarterImpl() {
@Override
public void startHelpActivity() {
super.startHelpActivity();
}
}
}https://stackoverflow.com/questions/49538446
复制相似问题