Java 如何初始化自定义接口

Java 如何初始化自定义接口,java,android,interface,Java,Android,Interface,我有一个界面: public interface ToggleChartListener { public void onToggleChartChanged(boolean isPie); } 我想从活动A中调用它,以便活动B可以监听更改 这是我到目前为止尝试过的,但我得到了一个ClassCastException: ToggleChartListener toggleChartListener = ((ToggleChartListener)getApplicationContex

我有一个界面:

public interface ToggleChartListener {
    public void onToggleChartChanged(boolean isPie);
}
我想从活动A中调用它,以便活动B可以监听更改

这是我到目前为止尝试过的,但我得到了一个ClassCastException:

ToggleChartListener toggleChartListener = ((ToggleChartListener)getApplicationContext());
toggleChartListener.onToggleChartChanged(true);

如何初始化接口?

由于
((ToggleChartListener)getApplicationContext())的原因,接口正在崩溃。您需要将
活动B
的实例键入
ToggleChartListener
以从
活动A
进一步调用
onToggleChartChanged()


另外,为什么您希望活动B收听更改?因为两个活动不能同时对用户可见?(相反,您可以使用
startActivityForResult()

通过接口与不同的活动进行通信是不正确的。 所以你可以按照下面的方法。 您有一个界面
ToggleChartListener
。在活动A中,必须声明接口对象,如:
private-ToggleChartListener然后您必须创建一个类似以下内容的方法:

// static because A is an activity you may not b access method from other activity
public static void initCallback(ToggleChartListener listener){
  this.listener = listener
}
现在,您可以调用接口方法:

listener.onToggleChartChanged(true);
在活动B中,您必须呼叫:

ActivityA.initCallback(new ToggleChartListener()) // here you get override method onToggleChartChanged to access data
N.B:但是将值从活动A传递到活动B的简单方法是
Intent

如果情况是您在活动A中,您将在返回活动A后进入活动B您需要结果,那么您可以通过调用活动A中的
startActivityResult
方法来使用
onActivityResult
方法,我建议您通过阅读回到基础。接口不是类,因此无法实例化。相反,接口是类可以选择实现的一组公共方法声明。使用处理程序在活动之间传递消息,而不是在接口之间传递消息。在您的实例中,
上下文
不实现
切换图表监听器
,因此不能强制转换为
切换图表监听器
@AbhayKoradiya,我不同意,使用处理程序不是推荐的方法,它通常会导致IllegalArgumentException(在那里我们必须使用isAdded()或isFinishing()来保护它)以及许多其他与Bundle相关的问题,但是在推荐的方法中,如果我们在
oncreate
中初始化处理程序,并在
finish
destroy
中分配null,则不会产生问题。