2016-07-15 2 views
0

私の質問は、クリックイベントが発生した後にplaceイベントリスナー(メソッド内のchangestatus())が実行を継続するか、一度だけ呼び出された場合です。は、「実行中」を続行するメソッドです。

public void onClick(View v) { 
    if (b1.getText()=="Start" && name!=null) { 
     b1.setText("Stop"); 
     inte.barstatus(); 
     inte.respond("Trying to find buildings near you"); 
     changestatus(); 
     Toast.makeText(getActivity(), "You have to get close to another building.", Toast.LENGTH_LONG).show(); 
    } 
    else if (b1.getText()=="Start"){ 
     b1.setText("Stop"); 
     inte.barstatus(); 
     inte.respond("Trying to find buildings near you"); 
     changestatus(); 
    } 
    else{ 
    b1.setText("Start"); 
    inte.barstatus2(); 
    inte.respond("Press Start button to find buildings near you"); 
      } 
} 
public void changestatus(){ 
     placeEventListener = new PlaceEventListener() { 
      @Override 
      public void onVisitStart(Visit visit) { 
       super.onVisitStart(visit); 
       name = visit.getPlace().getName().toString(); 
       switch (name) { 
        case "test1": { 
         inte.respond(name.toString()); 
         inte.barstatus2(); 
         ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 100); 
         toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); 
         break; 
        } 
        case "test2": { 
         inte.respond(name.toString()); 
         inte.barstatus2(); 
         ToneGenerator toneY = new ToneGenerator(AudioManager.STREAM_ALARM, 100); 
         toneY.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); 
         break; 
        } 
        case "Joylamp": { 
         inte.respond(name.toString()); 
         inte.barstatus2(); 
         ToneGenerator toneT = new ToneGenerator(AudioManager.STREAM_ALARM, 100); 
         toneT.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200); 
         break; 
        } 
       } 
      } 
     }; 

........................................... ............ 私の質問を理解できることを願っています。

placeManager = PlaceManager.getInstance(); 
     placeManager.addListener(placeEventListener); 
     placeManager.startMonitoring(); 
     CommunicationManager.getInstance().startReceivingCommunications(); 

答えて

0

あなたはPlaceEventListenerを作成しているが、あなたはPlaceManager(のようなplaceManager.addListener(placeEventListener);

に代入されていません。

EDIT おかげで、私は方法)changestatusの内側(あるコードのこの部分を忘れてしまいました

このようにして、changestatus()メソッドを実行して終了すると、placeEventListenerはガベージコレクタによって収集されます(誰も参照していないため)

あなたのplaceEventListenerは決してイベントを受け取ることはないと信じています。

UPDATEあなたはあなたの質問を更新し

...今

、我々はplaceEventListener意志が生きていると受信イベントが残っていることがわかります。だから、聞いて停止するように、いくつかの条件を追加するには、削除、それをしなかった場合、それは限りplaceManager()が生きたままのように実行し続けますplaceManager.getInstance().removeListener()

を呼び出すまで、それが継続的に実行されます...だから、私はあなたのコードを改善することをお勧めイベント... ...のようなもの:

public class TestClass extends Activity { 
    private PlaceEventListener placeEventListener; 


    public void changestatus(){ 
     if(placeEventListener == null) { 
      placeEventListener = new PlaceEventListener() { 
       @Override 
       public void onVisitStart(Visit visit) { 
        super.onVisitStart(visit); 
        .... 
        ... 
       } 
      } 

      CommunicationManager placeManager = PlaceManager.getInstance(); 
      placeManager.addListener(placeEventListener); 
      placeManager.startMonitoring(); 
      placeManager.startReceivingCommunications(); 
     } 

    } 

    /* 
     Remember to add conditions to stop monitoring... 
     Otherwise, you listener will remains running even when you no longer need. 
     Also, placeManager is a static method.. so, it last longer than your activity/class... 
     If you don't remove your listener when your object/activity is being destroyed, you can induce memory leaks 

     So, if you add a listener, remember to remove it 
    */ 
    @Override 
    public void onDestroy() { 
     if(placeEventListener != null) { 
      CommunicationManager placeManager = PlaceManager.getInstance(); 
      placeManager.removeListener(placeEventListener); 
      placeManager.stopMonitoring(); 
      placeManager.stopReceivingCommunications(); 
     } 

     super.onDestroy(); 
    } 
} 
+0

....編集plsを参照してください...大丈夫ですか? @Guilherme P –

関連する問題