2012-07-03 32 views
1

現在我意識到添加聽衆,然後設置字段會觸發更改。所以我設置我的領域,然後添加監聽器。爲什麼我的聽衆觸發快樂

我甚至在觸發時添加了一個布爾值,以避免這種情況。但是在OnResume之後。我所有的聽衆都在開火。有人可以解釋爲什麼,以及如何阻止它。謝謝。

這裏是我的代碼/工作流:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    spn1.setSelection(2); 
    spn2.setSelection(15); // Gets replaced by the listener to 2, when it shouldnt! 

    UseListeners = false; // Ignores fired events with an IF statement. 

    addListeners(); 

    //UseListeners = true; 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    UseListeners = true; 
} 


private void addListeners() { 
    spn1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
      try{ 
       if(UseListeners){      
        spn2.setSelection(spn1.getSelectedItemPosition());      
       } 
      } catch (Exception e) 
      { 
      } 
     } 
     @Override 
     public void onNothingSelected(AdapterView<?> arg0) {    
     } 
    }); 
} 

肯定的onResume後,沒有什麼改變,即使如此它不應該被解僱。在恢復字面上只是將布爾值設置爲true。這是應用程序運行之前的最後一個狀態,所以我不確定它觸發的位置和原因。它的Super在被允許使用觸發器之前被調用。

+0

我們可以看看剩下的代碼嗎? (設置字段並添加監聽器)至少有一個例子,所以我們可以看到你在做什麼。 – Th0rndike

+0

@ Th0rndike有我們去:)當它第一次嘗試觸發(創建偵聽器時),它由於布爾值而跳過。但是之後在'onResume();'在活動初始​​化期間的某個點觸發 – Doomsknight

+0

如果刪除onResume()方法,它們會觸發嗎? – Alexander

回答

2

我認爲在創建佈局後調用監聽器。看起來創建視圖發生在onPause()方法之後的某個時間點,因此在onPause()中設置布爾標誌的操作應該設置爲偵聽器。

請參閱herehere