我一直在寻找如何执行此操作的 KISS 示例,虽然它们看起来都很简单(而且我已经全部完成了!),但我仍然无法理解这个概念。我指的是自定义侦听器(不扩展任何内容的侦听器)…特别是为布尔变量创建侦听器,以便我可以在其值更改时触发一些方法。
这是我试过的一个例子: android how to make listener to a custom variable?
如果有人有时间用简单的英语解释自定义侦听器及其工作原理,将不胜感激。我希望一旦我确切地了解了如何向侦听器通知更改,那么我将能够创建自己的并了解该死的东西是如何工作的。这让我很头疼……提前致谢
这是我现在所在的位置:
public class ChangeListener {
boolean boo = false;
public ChangeListener(boolean b){
boo = b;
}
private listener l = null;
public interface listener{
public void onChange(boolean b);
}
public void setChangeListener(listener mListener){
l = mListener;
}
public void somethingChanged(){
if(l != null){
l.onChange(boo);
}
}
}
这是我的主要活动的快照:
public class Main extends Activity implements ChangeListener.listener{
private ChangeListener listener;
private boolean boo = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listener = new ChangeListener(boo);
listener.setChangeListener(this);
listener.somethingChanged();
}
@Override
public void onChange(boolean b) {
// TODO Auto-generated method stub
Toast.makeText(this, "REST = "+b, Toast.LENGTH_SHORT).show();
}
}
现在,当 Activity 开始时,Toast 会显示 boo… 太棒了。问题是这只发生在 onCreate 中,这是有道理的,因为 .somethingChanged 被放置在那里。我想要的是每次 boo 从 false 变为 true,true 变为 false 时生成 Toast,无论它是否在 onCreate 内。 IE:
- 单击一个按钮
- 导致 boo 从 false 变为 true
- 侦听器接受更改并运行 onChange 中的任何内容
我知道我可以只使用按钮 actionListener 来执行此操作,但如果可能的话我想远离它,目前我开始认为这是不可能的。
任何见解将不胜感激。提前致谢!
原文由 user1977217 发布,翻译遵循 CC BY-SA 4.0 许可协议
您将变量包装在自定义类中,这样唯一的访问函数也会触发侦听器。因此,翻转开关的唯一方法是通过切换和调用侦听器的功能。
要监视更改,您需要实现 BooVariable.ChangeListener,然后将“this”的副本传递给 BooVariable 类,然后,当您更改变量时,它会调用 onChange。
另外,请记住,您可以直接内联代码而不是直接扩展:
附言。 toast 必须从 UI 线程调用,因此如果要在不同的线程中更改变量,则需要切换 Looper。不过,这可能不会出现。