属性 "Listener" 在 Android 工作室
Property "Listener" in Android Studio
我在主 activity 中创建了一个扩展 ScreenView 的 Viewscreen。我想在我的 Viewscreen 中为两个 public 布尔值创建侦听器。
public class Mainactivity extends Activity {
private ViewScreen view;
private PropertyChangeEvent event1;
private PropertyChangeEvent event2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
view= new ViewScreen(this);
setContentView(view);
event1= new PropertyChangeEvent(view, "boolean1",false,true);
event2= new PropertyChangeEvent(view, "boolean2",false,true);
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if (view.boolean1) {dothing1();}
}
};
}
我希望这些侦听器检测到多个更改。例如(b1 是 boolean1):
b1=false-->b1=true,然后我们做thing1.
那么b1=true-->b1=false,我们什么都不做
然后b1=false-->b1=true,我们再做thing1
为什么不起作用?
您可能需要阅读 观察者设计模式
这是为所有遇到麻烦的人准备的。使用 PropertyChangeEvent 非常简单。
所以在更高层次上看你有:
- 您的 "Activity" 包含 [2]
- 你的"object"
两者你都想要
import java.beans.*;
在您的对象中,您有想要跟踪的 属性(可能是点击按钮,或者如果您正在制作游戏,无论它们是否是 dead/alive)。我们称它为 boolean1
因此,要跟踪 boolean1,您必须创建 PropertyChangeSupport。
public class Object extends[whatever you like] implements [whatever you want]{
public boolean1=false;
public PropertyChangeSupport changes = new PropertyChangeSupport(this);
public void yourapplication(){
//you're doing whatever you're application does here
...
boolean1=true; //something happened (maybe the player lost)
this.changes.firePropertyChange("boolean1",false,true); // So we tell our listener
...
// the rest of your application happens
}
}
好的,我们已经用最少的信息定义了我们的对象来告诉我们的听众 "something happened"
public class Main extends Activity{
private Object obj;
public PropertyChangeListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
obj= new Object(this);
listener= new PropertyChangeListener() { //This is how we define the listener and tell it what to do when it hears something change
@Override
public void propertyChange(PropertyChangeEvent event) {
if (obj.boolean1) {
dothing1();
obj.boolean1=false;
}
}
};
obj.changes.addPropertyChangeListener(listener); //The Support class binds the property change listener to our Object
}
}
我在主 activity 中创建了一个扩展 ScreenView 的 Viewscreen。我想在我的 Viewscreen 中为两个 public 布尔值创建侦听器。
public class Mainactivity extends Activity {
private ViewScreen view;
private PropertyChangeEvent event1;
private PropertyChangeEvent event2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
view= new ViewScreen(this);
setContentView(view);
event1= new PropertyChangeEvent(view, "boolean1",false,true);
event2= new PropertyChangeEvent(view, "boolean2",false,true);
new PropertyChangeListener() {
@Override
public void propertyChange(PropertyChangeEvent event) {
if (view.boolean1) {dothing1();}
}
};
}
我希望这些侦听器检测到多个更改。例如(b1 是 boolean1):
b1=false-->b1=true,然后我们做thing1.
那么b1=true-->b1=false,我们什么都不做
然后b1=false-->b1=true,我们再做thing1
为什么不起作用?
您可能需要阅读 观察者设计模式
这是为所有遇到麻烦的人准备的。使用 PropertyChangeEvent 非常简单。
所以在更高层次上看你有:
- 您的 "Activity" 包含 [2]
- 你的"object"
两者你都想要
import java.beans.*;
在您的对象中,您有想要跟踪的 属性(可能是点击按钮,或者如果您正在制作游戏,无论它们是否是 dead/alive)。我们称它为 boolean1
因此,要跟踪 boolean1,您必须创建 PropertyChangeSupport。
public class Object extends[whatever you like] implements [whatever you want]{
public boolean1=false;
public PropertyChangeSupport changes = new PropertyChangeSupport(this);
public void yourapplication(){
//you're doing whatever you're application does here
...
boolean1=true; //something happened (maybe the player lost)
this.changes.firePropertyChange("boolean1",false,true); // So we tell our listener
...
// the rest of your application happens
}
}
好的,我们已经用最少的信息定义了我们的对象来告诉我们的听众 "something happened"
public class Main extends Activity{
private Object obj;
public PropertyChangeListener listener;
@Override
protected void onCreate(Bundle savedInstanceState) {
obj= new Object(this);
listener= new PropertyChangeListener() { //This is how we define the listener and tell it what to do when it hears something change
@Override
public void propertyChange(PropertyChangeEvent event) {
if (obj.boolean1) {
dothing1();
obj.boolean1=false;
}
}
};
obj.changes.addPropertyChangeListener(listener); //The Support class binds the property change listener to our Object
}
}