【问题标题】:Why are my listeners trigger happy为什么我的听众会触发快乐
【发布时间】:2012-07-03 20:33:39
【问题描述】:

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

我什至在触发时添加了一个布尔值,以避免这种情况。但是在 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 之后,什么都没有改变,所以它不应该被触发。从字面上看,简历只是将布尔值设置为真。这是应用程序运行之前的最后一个状态,所以我不确定它在哪里以及为什么会触发。它的 Super 在被允许使用触发器之前被调用。

【问题讨论】:

  • 我们能看到剩下的代码吗? (设置字段并添加侦听器)至少 1 个示例,以便我们可以看到您在做什么。
  • @Th0rndike 我们走了 :) 当它第一次尝试触发时(创建侦听器时),由于布尔值而跳过。但随后在活动初始​​化期间的某个时间点在onResume(); 之后触发
  • 如果您删除 onResume() 方法,它们会触发吗?
  • @Alexander aka,删除 UseListeners = true;?没有。我在我的字段中看到了所需的值。 (监听器触发,但没有被授予运行/更改任何内容的权限)
  • 我的意思是从你的类中删除整个覆盖的 onResume() 方法,如果这个方法没有任何意义的话。

标签: android triggers listeners


【解决方案1】:

我认为监听器是在布局创建后调用的。看起来创建视图是在 onPause() 方法之后的某个时间点发生的,因此在 onPause() 中设置布尔标志时应该在侦听器中设置它。

请参阅 herehere

【讨论】:

    猜你喜欢
    • 2017-01-18
    • 2011-03-03
    • 2010-12-08
    • 2014-07-01
    • 2014-03-23
    • 1970-01-01
    • 2012-06-20
    • 2021-10-04
    • 2012-12-23
    相关资源
    最近更新 更多