1

因爲我第一次嘗試開關(新的android)我不知道如何處理這個問題。我有一個活動開關和附加的setOnCheckedChangeListener()它。當活動的oncreate被稱爲我做一個異步調用數據庫,並根據收到的價值我設置開關的狀態開/關。現在的問題是,但是我設置開關狀態只顯示它的當前狀態數據庫,沒有用戶改變它,但仍然調用列表功能。我知道代碼工作正常,但狀態改變列表我需要別的東西來確認狀態已被用戶更改。我想的onTouchEvent(MotionEvent事件)可以填補的目的,但不知道在炎熱一起選擇使用它與switch.setOnCheckedChangeListener如何跳過switch.setOnCheckedChangeListener當用戶沒有更新狀態

沒有人知道任何更好的解決方案,以它的或至少可以幫我告訴如何,即使ontouch使用listner ...

sw_recording_switch.setOnCheckedChangeListener(new OnCheckedChangeListener() { 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    }} 

謝謝!!!

回答

4

事實上, OnCheckedChangeListener也會被觸發。 我克服這個問題的方法是使用一個標誌,並將其設置爲false我打電話setChecked()之前

這樣,當您以編程方式使用setChecked(聽衆仍然會叫),但裏面的代碼將不會執行除非用戶按下開關。

//prevent the code from listener to run, flag set to false before calling setChecked(true); 
    should_run = false; 
    toggle_facebook.setChecked(true); 

    .... 

    private OnCheckedChangeListener onSwitchSlided = new OnCheckedChangeListener() 
    { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
     { 
      switch(buttonView.getId()) 
      { 
       case R.id.settings_toggle_facebook: 
       { 
        if(true == should_run) 
        { 
         //do stuff 
        } 

        should_run = true; 
        break; 
       } 
       case R.id.settings_toggle_twitter: 
       { 
        if(true == should_run) 
        { 
         //do stuff 
        } 

        should_run = true; 
        break; 
       } 
      } 
     } 
    }; 
+0

謝謝@Goran ...正在想同樣的方式,你只是確認我應該去...作品像我想...:D – 2014-12-04 19:58:22

1

處理初始化代碼的兩種方式,所以處理程序不會觸發。

設計您的處理程序以識別它是初始化。下面的示例使用isResumed()來確定代碼是否正在初始化。這是因爲onCreate在onResume之前被調用。

@Override 
public void onCheckedChanged(RadioGroup rg, int checkId) { 
    switch (rg.getId()) { 
     case R.id.rgMileKilometer: 
      switch (checkId) { 
       // process the speed radio group 
       case R.id.rdoMiles: 
        // Speed Radio Group check if the mph button is checked 
        isMile = true; 
        break; 
       case R.id.rdoKilometer: 
        isMile = false; 
        // Speed Radio Group check if the mph button is checked 
        break; 
      } 
      if (isResumed()) { 
       //do something the code is ready... 
      } 
    } 
} 

添加監聽你打電話Switch.setChecked(布爾)當完成初始化之後

CheckBox cb = (CheckBox) view 
      .findViewById(R.id.cbApplicationCacheTabs); 
    cb.setChecked(isApplicationCacheTabs); 
    cb.setOnCheckedChangeListener(this); 
相關問題