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,则不会产生问题。