【问题标题】:Call interface method implemented in an activity from a java class从 java 类调用活动中实现的接口方法
【发布时间】:2017-09-30 17:57:44
【问题描述】:

我想从编写 web api 的 java 类调用在活动 A 中实现的接口方法。

流程就像从活动A移动到活动B,从活动B调用一个用单独的java类编写的api,现在api成功,我想调用活动A中实现的接口方法。

A -> B -> Java 类 -> A 中的 interface()

我在获取 java 类中活动 A 的引用以调用接口方法时遇到问题。我尝试了以下代码,但没有任何效果。感谢您的时间和帮助

Interface objInterface =  (Interface) context;
objInterface.funInterface();

Interface objInterface =  (Interface) context.getApplicationContext();
objInterface.funInterface();

Interface objInterface =  (Interface) new Activity_A;
objInterface.funInterface();

【问题讨论】:

  • 尝试使用 EventBus 就这么简单。你不需要使用接口github.com/greenrobot/EventBus
  • 如果我理解的话,你想调用实现Java类中活动A的接口方法吗?如果是,那么您可以通过传递上下文然后执行 Interface i = (ActivityA) context; 来获取对活动 A 的引用;
  • @RaffaeleD'Arco 类似的上下文是从 ActivityB 传递的并将其转换为 ActivityA
  • 尝试接口接口=(接口)上下文。当我想将片段与活动通信时,这很有效

标签: android interface


【解决方案1】:

让我描述一下你正在尝试做的事情,也许你会明白为什么你会遇到困难:


Interface objInterface =  (Interface) context;
objInterface.funInterface();

如果这个context 来自活动B,那么这是错误的。 Activity B 和 Activity A 都是Contexts,但不是同一个Context


Interface objInterface =  (Interface) context.getApplicationContext();
objInterface.funInterface();

ApplicationActivity 不同。它不能神奇地变成 Activity A。


Interface objInterface =  (Interface) new Activity_A;
objInterface.funInterface();

这绝对是一个 Activity A,它确实有实现...但它与已经存在的 A 不同。


Activity B 不应该知道 Activity A。你的独立 java 类不应该知道 Activity B。这是一个常见的设计原则,称为 Separation of Concerns。我建议首先将重点放在从您的 java 类中获取数据到活动 B 上。然后,获取该数据并使用记录在案的活动之间通信的方式将其发送回活动 A:https://developer.android.com/training/basics/intents/result.html

最后,您可以使用EventBus 之类的通信库,但查看您的代码似乎您可能误解了一个核心概念,因此在您了解范围之前,我不建议您依赖“神奇的数据总线”安卓组件。 :)

【讨论】:

  • 很好的答案 +1。
猜你喜欢
  • 2014-03-13
  • 2016-05-29
  • 1970-01-01
  • 2017-08-21
  • 2021-09-30
  • 1970-01-01
  • 2014-11-20
  • 1970-01-01
相关资源
最近更新 更多