Androidのアプリを開発する際、一般的なパーツのスピナー。
これ、初回起動時にonItemSelectedが実行されちゃうんですね。
無限ループしちゃったので対処法を。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final Spinner spinner = (Spinner) view.findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getContext(), android.R.layout.simple_spinner_item, arrGroupName);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
spinner.setSelection(spinnerPosition);
// 初回動作の対応
spinner.setFocusable(false);
setSpinner(spinner);
}
setFocusableにfalseを設定。
private void setSpinner(final Spinner spinner) {
spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) {
// 初回の動作
if (spinner.isFocusable() == false) {
spinner.setFocusable(true);
return;
}
// 初回以降の動作
// --- 処理 ---
}
@Override
public void onNothingSelected(AdapterView<?> adapterView) {
}
});
}
こんな感じ。
期待通りの動作となりました。
実装にあたって、こちらの記事を参考にしました。感謝感謝。
Spinner#onItemSelectedが起動時に一度実行されてしまう件の対策
株式会社woodsmallの小林でした。
https://woodsmall.co.jp/
コメント