首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现库中定义的接口

实现库中定义的接口
EN

Stack Overflow用户
提问于 2018-03-28 15:25:53
回答 2查看 1.5K关注 0票数 1

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

MyApp-/

代码语言:javascript
复制
 class LibraryImpl implements interface register .

我的朋友-/。

代码语言:javascript
复制
  interface register .  

示例代码片段:

MyLib .

ActivityStarter.java

代码语言:javascript
复制
public interface ActivityStarter {
    void startHelpActivity();
}

ActivityStarterModule.java

代码语言:javascript
复制
public class ActivityStarterModule extends ReactContextBaseJavaModule {
    @ReactMethod
    void navigateToExample() {
       //Start an activity
    }
}

MyApp .

ActivityStarterImpl.java

代码语言:javascript
复制
public class ActivityStarterImpl extends BaseActivity implements ActivityStarter {
    public void startHelpActivity(){
        Intent intent = new Intent(this, HelpActivity.class);
        startActivity(intent);
    }
}

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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的范围限制在应用程序自己的包中。然后,通过PackageManagerresolveActivity()查找活动。使用该信息构建显式Intent (具有活动的ComponentName )。然后,使用显式Intent启动活动。

选项4:不要有两个单独的模块;让所有这些都是一个应用程序模块。然后,以前在MyLib中的代码可以直接访问以前在MyApp中的代码。

票数 0
EN

Stack Overflow用户

发布于 2018-03-30 21:20:55

解决方案基于CommonsWare提出的建议。

MyLib。

ActivityStarter.java

代码语言:javascript
复制
public interface ActivityStarter {
    void startHelpActivity();
}

ActivityStarterModule.java

代码语言:javascript
复制
public class ActivityStarterModule extends ReactContextBaseJavaModule {
    ActivityStarter mActivityStarter;
            @ReactMethod
            void navigateToExample() {
               //Start an activity
               mActivityStarter.startHelpActivity();
            }
        }

MyApp。ActivityStarterImpl.java

代码语言:javascript
复制
    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();
            }
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49538446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档