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 は、トリガーの使用が許可される前に呼び出されます。

4

1 に答える 1

2

レイアウトが作成された後にリスナーが呼び出されると思います。ビューの作成はメソッドの後のある時点で行われるように見えるonPause()ので、ブールフラグを設定するのonPause()ではなく、リスナーで設定する必要があります。

ここここを参照してください。

于 2012-07-03T11:49:28.257 に答える