private OnScoreSavedListener onScoreSavedListener;
public interface OnScoreSavedListener {
public void onScoreSaved();
}
// ALLOWS YOU TO SET LISTENER && INVOKE THE OVERIDING METHOD
// FROM WITHIN ACTIVITY
public void setOnScoreSavedListener(OnScoreSavedListener listener) {
onScoreSavedListener = listener;
}
public interface NewInterface {
void callback();
}
创建一个新类,NewClass.java。它将调用主类中的回调方法。
package javaapplication1;
public class NewClass {
private NewInterface mainClass;
public NewClass(NewInterface mClass){
mainClass = mClass;
}
public void calledFromMain(){
//Do somthing...
//call back main
mainClass.callback();
}
}
Message message = new Message();
<set data to be passed to callback - eg message.obj, message.arg1 etc - here>
Callback callback = new Callback() {
public boolean handleMessage(Message msg) {
<code to be executed during callback>
}
};
Handler handler = new Handler(callback);
handler.sendMessage(message);
EDIT:刚刚意识到有一种更好的方法可以获得相同的结果(减去控制何时执行回调):
post(new Runnable() {
@Override
public void run() {
<code to be executed during callback>
}
});
fun main() {
val worker = Worker()
worker.setOnCallListener(
object: OnCallListener {
override fun onCall() {
// here we define what should happen
// when the event accures
print("event happend")
}
}
)
// most events will be called from Android system itself
// but in our case we have to call it manually
worker.listener.onCall()
}
Worker类具有类型OnCallListener接口的示例和设置其值的方法:
class Worker() {
lateinit var listener: OnCallListener
fun setOnCallListener(listener: OnCallListener) {
this.listener = listener
}
}
7条答案
按热度按时间zdwk9cvp1#
在许多情况下,你有一个接口,并沿着一个实现它的对象。例如,对话框有OnClickListener。
举个随机的例子:
我可能把选项2的语法搞砸了。现在还早。
zour9fqk2#
当视图中发生某件事时,我会触发Activity正在侦听的事件:
//在(自定义)视图中声明
//活动声明
如果你想知道更多关于片段之间的通信(回调),请看这里:http://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity
lb3vh1jj3#
如果可以使用现有接口,则无需定义新接口:
android.os.Handler.Callback
。传递类型为Callback的对象,并调用回调的handleMessage(Message msg)
。pdsfdshx4#
使用接口实现回调方法的示例。
定义接口NewInterface.java。
封装java应用程序1;
创建一个新类,NewClass.java。它将调用主类中的回调方法。
主类JavaApplication1.java实现接口NewInterface - callback()方法,创建并调用NewClass对象,NewClass对象依次回调其callback()方法。
vnjpjtjt5#
澄清一下dragon的回答(因为我花了一段时间才弄清楚如何处理
Handler.Callback
):Handler
可用于在当前或另一个线程中执行回调,方法是将其传递给Message
。Message
保存回调中使用的数据。Handler.Callback
可传递给Handler
的构造函数,以避免直接扩展处理程序。因此,要通过当前线程的回调执行某些代码:EDIT:刚刚意识到有一种更好的方法可以获得相同的结果(减去控制何时执行回调):
g2ieeal76#
您也可以使用
LocalBroadcast
来实现此目的。创建广播接收器:
这就是你如何触发它
在onPause中取消注册接收器:
rsl1atfo7#
假设主要功能是触发事件的活动:
Worker
类具有类型OnCallListener
接口的示例和设置其值的方法:OnCallListener
接口如下所示: