【发布时间】:2019-06-12 09:25:30
【问题描述】:
我有一个界面:
public interface ToggleChartListener {
public void onToggleChartChanged(boolean isPie);
}
我想从活动 A 中调用它,以便活动 B 可以监听更改。
这是我迄今为止尝试过的,但我得到了 ClassCastException:
ToggleChartListener toggleChartListener = ((ToggleChartListener)getApplicationContext());
toggleChartListener.onToggleChartChanged(true);
如何初始化界面?
【问题讨论】:
-
我建议通过阅读 "What is an interface?" 回归基础。接口不是类,因此不能被实例化。相反,接口是一组类可以选择实现的通用方法声明。
-
使用处理程序在活动而不是接口之间传递消息。
-
在您的实例中,
Context确实没有实现ToggleChartListener,因此不能转换为ToggleChartListener。 -
@AbhayKoradiya,我不同意,使用处理程序不是推荐的方法,它通常会导致 IllegalArgumentException(我们必须使用 isAdded() 或 isFinishing() 保护它)和许多其他与 Bundle 相关的问题,但建议使用接口。
-
@Astha,如果我们在
oncreate中初始化处理程序并在finish和destroy中分配null,则不会产生问题。