属性 "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 非常简单。

所以在更高层次上看你有:

  1. 您的 "Activity" 包含 [2]
  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
          }
}