对于那些来到这里只是想成为一个倾听者的人来说,这是一个更一般的答案。我总结了从 CodePath 创建自定义侦听器。如果您需要更多解释,请阅读该文章。
以下是步骤。
1. 定义接口
这是在需要与某个未知父级进行通信的子类中。
public class MyClass {
// interface
public interface MyClassListener {
// add whatever methods you need here
public void onSomeEvent(String title);
}
}
2. 创建侦听器 Setter
将私有侦听器成员变量和公共 setter 方法添加到子类。
public class MyClass {
// add a private listener variable
private MyClassListener mListener = null;
// provide a way for another class to set the listener
public void setMyClassListener(MyClassListener listener) {
this.mListener = listener;
}
// interface from Step 1
public interface MyClassListener {
public void onSomeEvent(String title);
}
}
3. 触发侦听器事件
子对象现在可以调用侦听器接口上的方法。请务必检查 null,因为可能没有人在侦听。(也就是说,父类可能没有为我们的侦听器调用 setter 方法。
public class MyClass {
public void someMethod() {
// ...
// use the listener in your code to fire some event
if (mListener != null)
mListener.onSomeEvent("hello");
}
// items from Steps 1 and 2
private MyClassListener mListener = null;
public void setMyClassListener(MyClassListener listener) {
this.mListener = listener;
}
public interface MyClassListener {
public void onSomeEvent(String myString);
}
}
4. 在父级中实现侦听器回调
父级现在可以使用我们在子类中设置的侦听器。
示例 1
public class MyParentClass {
private void someMethod() {
MyClass object = new MyClass();
object.setMyClassListener(new MyClass.MyClassListener() {
@Override
public void onSomeEvent(String myString) {
// handle event
}
});
}
}
示例 2
public class MyParentClass implements MyClass.MyClassListener {
public MyParentClass() {
MyClass object = new MyClass();
object.setMyClassListener(this);
}
@Override
public void onSomeEvent(String myString) {
// handle event
}
}