我一直在寻找,我发现了这个...
interface CallBack {
void methodToCallBack();
}
class CallBackImpl implements CallBack {
public void methodToCallBack() {
System.out.println("I've been called back");
}
}
class Caller {
public void register(CallBack callback) {
callback.methodToCallBack();
}
public static void main(String[] args) {
Caller caller = new Caller();
CallBack callBack = new CallBackImpl();
caller.register(callBack);
}
}
与其他人有什么不同。
interface CallBack {
void methodToCallBack();
}
class CallBackImpl implements CallBack {
public void methodToCallBack() {
System.out.println("I've been called back");
}
}
class Caller {
public static void main(String[] args) {
CallBack callBack = new CallBackImpl();
callBack.methodToCallBack();
}
}
我的情况: 当这个监听器执行时,我在适配器y内有一个onclicklistener(只有一个孩子不完整的行),我想在活动上执行一个方法,因为在活动中我有访问UI ..
答案 0 :(得分:1)
回调的目的是用于异步通信。你告诉别人通过回电(电话号码)告诉我什么时候发生的事情。除此之外,我对回调的好处是:
- 你可以避免课程之间的依赖
- 有助于避免内存泄漏。
举一个从片段到活动的沟通的例子。虽然你可以调用getActivity()。aMethodInActivity(),但它不是优选的,因为它违反了“可重用性”片段的目的之一。我们可能倾向于将活动实例传递给碎片,这可能导致活动泄漏。
片段和适配器的情况也是如此。从适配器到片段的通信应该使用回调进行。否则,如果片段作为参数传递给适配器,则适配器保持对片段的引用,片段保持适配器的引用。这可能会导致泄漏。
我尝试用Android视角解释回调的优势,我知道几个例子。你可以进一步探索。
答案 1 :(得分:0)
使用第一种方法,您注册到Callback,因此可以自动调用 methodToCallBack 。
你说你有一个 OnClickListener ,我猜它是在另一个班级。 您可以将其创建为内部类,这样您就可以访问UI了。
或者你在构造函数中给你的 OnClickListener 他需要的一切
答案 2 :(得分:0)
这应该完全符合你的要求: Communicating with Other Fragments