2015-03-19 92 views
0

我在我的MAINACTIVITY.java中使用了ToggleButton。当它从另一个类GPSLOCATION.java中获取当前位置并更新到服务器时。获取切换按钮在不同类中的状态android

<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即运行,如果切换按钮是ON然后每隔一个分钟位置被取出,并在服务器上更新。 相反,我想获得GPSLOCATION.java中的TOGGLEBUTTON状态,位于onLocationChanged方法中,如果打开,那么我需要将它更新到服务器,我知道任何人都可以帮助我摆脱这种情况。

回答

1

所以你想在另一个类中获得这个按钮的当前状态?您可以使用EventBus

请参见:http://square.github.io/otto/

你可以断火时的开关切换的Event,然后@Subscribe在要处理的更新到服务器类的事件。

例如:

注册既你的类与EventBus(假设你初始化应用程序级别的EventBus),你可以在onCreate称之为:

MyApplication.getInstance().getBus().register(this); 

或沿着线的东西,这将注册所需班级以接收或能够在公交车上发布活动。

请务必在两个课程中都这样做!

然后,你必须创建一个事件被张贴,是这样的:

public class ToggleEvent { 

    public ToggleEvent() { 
     // 
    } 
} 

然后发布事件时onToggled被称为像这样:

GPSLocation类,你可以
MyApplication.getInstance().getBus().post(new ToggleEvent()); 

然后有一种方法,如:

@Subscribe public void retrieveToggleEvent(ToggleEvent event) {...} 

这将检索触发事件时(即当调用onToggle并且事件被触发!)。那么你应该可以在retrieveToggleEvent上发布到服务器。

您还可以使用简单的getter方法沿总线传递有用的数据。在你的情况下,重写onToggled可能会更好,那么你可以通过总线上交换机的布尔状态,并且在你的@Subscribe方法GPSLocation中处理它的真/假。

由于在类注册总线将留在记忆永远,你应该想想注销总线onDestroy

MyApplication.getInstance().getBus().unregister(this);

希望这有助于!