我的类中有一个变量,我希望当该变量更改时,我在另一个类中执行操作。
事实上,我想要一个在android中更改变量的监听器(我的变量可能每分钟都会更改)

public class Connect {
     public static boolean myBoolean;
//some actions do and myBoolean change
}

public class Selection extends Activity implements OnMenuItemClickListener{

//I want a thing like listener here ,when myboolean changed I do an action (myboolean may change every minute)

}

最佳答案

这是不可能直接的。但是,您可以将字段设为私有,添加getter和setter,并创建添加侦听器的方法(这称为Observer pattern):

interface ConnectionBooleanChangedListener {
    public void OnMyBooleanChanged();
}

public class Connect {
     private static boolean myBoolean;
     private static List<ConnectionBooleanChangedListener> listeners = new ArrayList<ConnectionBooleanChangedListener>();

     public static boolean getMyBoolean() { return myBoolean; }

     public static void setMyBoolean(boolean value) {
         myBoolean = value;

         for (ConnectionBooleanChangedListener l : listeners) {
             l.OnMyBooleanChanged();
         }
     }

     public static void addMyBooleanListener(ConnectionBooleanChangedListener l) {
         listeners.add(l);
     }
}

然后,无论您想在何处侦听布尔值的更改,都可以注册侦听器:
Connect.addMyBooleanListener(new ConnectionBooleanChangedListener() {
    @Override
    public void OnMyBooleanChanged() {
        // do something
    }
});

添加删除侦听器的方法作为练习保留。显然,要实现这一点,您需要确保myBoolean仅通过setMyBoolean进行更改,即使在Connect内部也是如此。

10-07 19:44
查看更多