我在MAINACTIVITY.java中使用了ToggleButton。当它从另一个类GPSLOCATION.java获取当前位置并更新到服务器时。
<ToggleButton
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:onClick="onToggleClicked" />
public void onToggleClicked(View view) {
boolean on = ((ToggleButton) view).isChecked();
if (on) {
update_alert();
} else {
timerAlert.cancel();
}
}
但是由于它通过使用TimerTask运行,即,如果TOGGLEBUTTON为ON,那么每隔一分钟就会获取LOCATION并在服务器中更新。 相反,我希望在 onLocationChanged 方法下的GPSLOCATION.java中获取TOGGLEBUTTON的状态,如果是,那么我需要将其更新到服务器,我知道有可能任何人都可以帮我摆脱这个场景。
答案 0 :(得分:1)
所以你想在另一个班级中获得这个按钮的当前状态吗?
你能否使用EventBus
?
请参阅:http://square.github.io/otto/
切换开关时可以触发Event
,然后@Subscribe
触发要处理服务器更新的类中的事件。
例如:
使用EventBus注册您的两个类(假设您在应用程序级别初始化EventBus),您可以在onCreate
中调用它:
MyApplication.getInstance().getBus().register(this);
或者类似的东西,这将注册所需的类以接收或能够在公共汽车上发布事件。
确保在两个班级都这样做!
然后你必须创建一个要发布的事件,例如:
public class ToggleEvent {
public ToggleEvent() {
//
}
}
然后在调用onToggled
时发布事件:
MyApplication.getInstance().getBus().post(new ToggleEvent());
然后在GPSLocation
课程中,您可以使用以下方法:
@Subscribe public void retrieveToggleEvent(ToggleEvent event) {...}
这将在触发事件时检索事件(即调用onToggle
并触发事件!)。然后,您应该能够在retrieveToggleEvent
。
您还可以使用简单的getter
方法在总线上传递有用的数据。在你的情况下,覆盖onToggled
可能更好,然后你可以通过总线中交换机的布尔状态,并在@Subscribe
GPSLocation
方法中处理它的真/假
由于在课程中注册总线将永远留在内存中,您应该考虑取消注册总线onDestroy
:
MyApplication.getInstance().getBus().unregister(this);
希望这有帮助!