android - 为什么我的听众触发快乐

标签 android triggers listeners

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

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

最佳答案

我认为监听器是在创建布局后调用的。看起来创建 View 发生在 onPause() 方法之后的某个时刻,所以不要在 onPause() 中设置 bool 标志,你应该在监听器中设置它。

参见 herehere .

关于android - 为什么我的听众触发快乐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309139/

相关文章:

java - 在谷歌标记 Android 上更新 InfoWindowAdapter 中的内容

android - Robolectric:Android 中的 SAXParser 与 Java 中的 SAXParser (robolectric):localname 与 qname 的差异

MySQL触发器更新动态列

Javascript 避免覆盖监听器

java - 当监听器是类变量时,JPanel.addComponentListener 不起作用

java - Dagger 2 使用不同的 URL 构建多个 Retrofit 实例,以便使用构造函数注入(inject)来访问不同的 API

Mysql 使用 if 语句和变量触发

android - 使用 SQLite 触发器更新 "LastModified"字段

java - 我想在鼠标悬停在 JMenuItem 上时执行一些操作。我应该使用什么监听器?

android - Kotlin Android Extensions 和 AndroidX 似乎没有正确转换 View