Android Spinner onItemSelectedが最初に実行される件

  •  

 

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/

関連記事

コメント

この記事へのコメントはありません。

TOP