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/
コメント