为什么我的听众会引发快乐

时间:2012-07-03 10:36:47

标签: android triggers listeners

现在我知道添加侦听器,然后设置字段会触发更改。所以我设置我的字段然后添加监听器。

我甚至在触发时添加了一个布尔值,以避免这种情况。然而在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即可。它是应用程序运行之前的最后一个状态,因此我不知道它在何时以及为何触发它。在被允许使用触发器之前调用它的超级。

1 个答案:

答案 0 :(得分:2)

我认为在创建布局后会调用侦听器。看起来在onPause()方法之后的某个时刻创建视图,所以在onPause()中设置你的布尔标志,你应该在监听器中设置它。

请参阅herehere