0

我在 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 的状态,如果为 ON,那么我需要将其更新到服务器,我知道任何人都可以帮助我摆脱这种情况。

4

1 回答 1

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);

希望这可以帮助!

于 2015-03-19T11:34:53.473 回答