2013-07-13 38 views
2

我有一個活動與Switch Control。通過此開關控制,用戶可以打開/關閉tcp服務器。Android的方向更改呼叫Switch.onChange

現在我有一個類似的問題here。如果開關(以及服務器)打開並且方向改變,則再次調用onclicklistener,並且服務器再次啓動。

我試圖通過檢查客戶端是空來處理這個問題:

OnCheckedChangeListener listener = new OnCheckedChangeListener() { 
    @Override 
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {  
     if(isChecked) { 
      if (client == null) 
       startCubeSolverServer(); 
     } else { 
      if (client != null) 
       stutdownCubeSolverServer(); 
     } 
    } 
}; 

但由於客戶對象是我的活動的私有變量將被重置爲空每個方向變化。

如果用戶視圖中的值沒有更改,是否有簡單的修復方法可以不運行changeHandler

+1

而不是檢查'客戶端!= null'你可以使用'sharedPreferences'和存儲'String'或'boolean'在'的onPause(值)'然後進行檢查在'onResume()'中。 –

+0

好主意使用sharedPreferences!你也有一個想法,我應該在哪裏處理我的服務器的對象? – TomBoo

+0

你可以在onResume()和'onPause'中的'SharedPreferences'中實現整個'OnCheckedChangeListener'函數。此外,如果我的評論是有用的標記他們如此。 –

回答

1

系統在您的情況下的行爲是正確的。當方向改變時,onCheckedChanged應該被調用。

現在針對您的情況,如果tcp服務器是服務,那麼您應該將onCreate方法中的所有初始化移動到onStartCommand中,而不是在方向更改後不做任何操作該服務只能由系統創建一次,無論您打算再次啓動多少次都無關緊要。

另一種解決方案是處理切換按鈕的onClick事件,而不是onCheckedChanged,因爲onClick在方向更改後不會觸發。但是,如果你這樣做,你必須研究,如果切換按鈕的onClick方法在檢查狀態改變之前或之後觸發。

希望這有助於...