リスナーを追加すると、フィールドを設定すると変更がトリガーされることがわかりました。そのため、フィールドを設定してからリスナーを追加します。
これを避けるために、トリガーされたときにブール値を追加しました。ただし、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 は、トリガーの使用が許可される前に呼び出されます。